[英]SQL - Combining Queries
我有兩個完全按照我想要的查詢,但是,我想嘗試將它們組合起來。
查詢1:
SELECT DISTINCT categories.id FROM categories
INNER JOIN product_categories
ON product_categories.category_id=categories.id
INNER JOIN products
ON product_categories.product_id=products.id
WHERE
categories.is_sub_cat='1' AND
categories.is_paused!='1' AND
products.nexus='1'
查詢2:
SELECT DISTINCT categories.top_cat FROM categories
INNER JOIN product_categories
ON product_categories.category_id=categories.id
INNER JOIN products
ON product_categories.product_id=products.id
WHERE
categories.top_cat!='0' AND
categories.is_paused!='1' AND
products.nexus='1'
是否可以將這些組合成1個查詢,或者我應該在完成兩個查詢之后將結果數組合並到PHP中?
您可以使用UNION
合並兩個查詢
SELECT DISTINCT categories.id FROM categories
INNER JOIN product_categories
ON product_categories.category_id=categories.id
INNER JOIN products
ON product_categories.product_id=products.id
WHERE
categories.is_sub_cat='1' AND
categories.is_paused!='1' AND
products.nexus='1'
UNION
SELECT DISTINCT categories.top_cat FROM categories
INNER JOIN product_categories
ON product_categories.category_id=categories.id
INNER JOIN products
ON product_categories.product_id=products.id
WHERE
categories.top_cat!='0' AND
categories.is_paused!='1' AND
products.nexus='1'
你可以用的時候用
SELECT case when (categories.is_sub_cat='1' AND categories.is_paused!='1' AND
products.nexus='1') then categories.id
else categories.top_cat end as id
FROM categories
INNER JOIN product_categories
ON product_categories.category_id=categories.id
INNER JOIN products
ON product_categories.product_id=products.id
您可以將查詢組合為
SELECT DISTINCT categories.id, categories.top_cat FROM categories
INNER JOIN product_categories
ON product_categories.category_id=categories.id
INNER JOIN products
ON product_categories.product_id=products.id
WHERE
( categories.is_sub_cat='1' OR categories.top_cat!='0' ) AND
categories.is_paused!='1' AND
products.nexus='1'
或者,如果列categories.id
和categories.top_cat
具有相同的數據類型,或者能夠轉換為相同的數據類型,則可以使用UNION ALL
。
是的,UNION似乎是一個合法的選擇。 對於你的情況,它應該沒關系,因為你是從同一個表中選擇,但作為旁注,你應該知道,當使用UNION時,你需要在表中具有相同數量的列(即如果它們不同)。
您可以使用WHERE
子句中的條件執行此操作:
SELECT DISTINCT c.id
FROM categories c INNER JOIN
product_categories pc
ON pc.category_id = c.id INNER JOIN
products p
ON pc.product_id = p.id
WHERE p.nexus = 1 AND
c.is_paused <> 1 AND
(c.is_sub_cat = 1 OR
c.top_cat <> 0
);
注意:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.