2013-03-01 41 views
1

我有ordersorder_attachmentsorder_preship_checkorder_preship_check_attachmentorder_logorder_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') 

所以,如果它返回我展示與秩序的ATTACHMENTS圖標。現在我需要將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。我希望它更清晰

+0

如果你想獲得一個總的,你可以只添加數字。如果您嘗試使用三行獲取結果集(每次一個結果集),請嘗試使用UNION。如果您試圖獲得每列計數查詢一列的結果集,只需將它們全部放入與子查詢相同的查詢中即可。 – aaaaaa123456789 2013-03-01 07:37:05

+0

我只需要檢查是否有附件,不需要其他細節 – 2013-03-01 07:37:59

+1

然後只需添加它們即可。像,做'SELECT(query1)+(query2)+(query3)AS'total'',其中各種查詢N事物是您已經擁有的查詢。我相當確定這應該工作。 – aaaaaa123456789 2013-03-01 07:41:28

回答

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 
1

使用UNION或UNION ALL但必須具有相同類型和數量的列。

示例代碼:

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

如果查詢包含不同數量的列使用連接嘗試。