1

我有orders, order_attachments, order_preship_check, order_preship_check_attachment, order_log,order_log_attachments

这些列中唯一的共同点是 order_id。现在在查询中,我只使用以下查询检查类型 1 和类型 2 的 order_attachments

SELECT
    COUNT(file_id) AS totalFiles
FROM
    orders_files
WHERE
    order_id = '88125'
AND attachment_type IN ('1', '2')

因此,如果它返回,我会显示一个带有该订单的附件图标。现在,我还需要在其中组合 preship 附件和日志附件。没有额外的检查,两者的单独查询如下

SELECT
    COUNT(file_id) AS totalFiles
FROM
    orders_preship_check_attachment
WHERE
    order_id = '88125'

SELECT
    COUNT(id) AS totalFiles
FROM
    orders_log_attachment
WHERE
    order_id = '88125'

我需要将这 3 个查询组合在一个查询中。所以如果每个表有 1 条记录,我只需要得到 3 的计数,即使 3 也不重要。表示如果这些记录中的任何一个有附件,我需要显示图标,TRUE 或 FALSE。我希望它更清楚

4

2 回答 2

1

使用 UNION 或 UNION ALL,但这必须具有相同的类型和列数。

示例代码:

    SELECT 'Customer' AS type, id, name FROM customer
    UNION ALL
    SELECT 'Supplier', id, name FROM supplier

如果您的查询包含不同数量的列,请尝试使用联接。

于 2013-03-01T07:41:18.377 回答
1

试试这个

SELECT SUM(totalFiles) AS totalFiles
  FROM (
    SELECT COUNT(file_id) AS totalFiles
      FROM orders_files
     WHERE order_id = '88125' AND
           attachment_type IN ('1', '2')
     UNION ALL
    SELECT COUNT(file_id) AS totalFiles
      FROM orders_preship_check_attachment
     WHERE order_id = '88125'
     UNION ALL
    SELECT COUNT(id) AS totalFiles
      FROM orders_log_attachment
     WHERE order_id = '88125'
    ) t

或者

SELECT COUNT(file_id) AS totalFiles
  FROM (
    SELECT file_id
      FROM orders_files
     WHERE order_id = '88125' AND
           attachment_type IN ('1', '2')
     UNION ALL
    SELECT file_id
      FROM orders_preship_check_attachment
     WHERE order_id = '88125'
     UNION ALL
    SELECT id
      FROM orders_log_attachment
     WHERE order_id = '88125'
    ) t
于 2013-03-01T07:44:28.127 回答