[英]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.