[英]SQL select all using JOIN
我正在使用此查询来整理两组结果,但是现在我需要使用JOIN而不是UNION来从另一个表中获取数据的第二部分。
但是我需要很多字段,并且在使用JOIN时似乎找不到找到维持SELECT *使用的方法。
mysql_query("SELECT * FROM table.products WHERE category='$cat' GROUP BY product_id ORDER BY id UNION ALL SELECT * FROM table.products WHERE type='red' GROUP BY product_id ");
表-产品
product_id | title | category | id
0 one home 10
1 two home 11
1 two - a home 12
2 three work 13
表格-product_details
product_id | type | size |
0 blue S
1 blue M
1 red L
最终,我需要在第一个表中为给定类别(例如家庭)列出每个产品,因为有时一个商品ID会有两个或更多条目,所以我只需要为每个商品ID值选择一行。 我还需要加入第二张表,以便获得尺寸信息,但是我必须能够通过偏爱红色等类型来获得尺寸信息。
因此,对于此示例,我将获得类似以下的列表:
product_id | title | category | type | size
0 one home blue S
1 two home red L
这不包括product_id 2,因为它不在家庭类别中,因为GROUP BY和ORDER BY选择了product_id等于1的第一个条目,并且product_id 1的尺寸信息为L,因为它的类型为红色而不是蓝色。
由于您使用的是同一表table.products
因此可以像下面那样简化查询。 不知道为什么需要UNION
。
SELECT * FROM table.products
WHERE category='$cat'
and type='red'
GROUP BY product_id
编辑:
编辑完帖子后,查询应如下所示
select p.product_id,p.title,p.category,q.type,q.size
from products p join product_details q
on p.product_id = q.product_id
where p.category = 'home'
and q.type = 'red'
假设您正在使用MySQL,则希望通过聚合或主动过滤进行联接。 这是使用join
和aggregation
的示例:
select p.product_id, p.title, p.category,
substring_index(group_concat(pd.type order by pd.type = 'red' desc, pd.type), ',', 1) as type,
substring_index(group_concat(pd.size order by pd.type = 'red' desc, pd.type), ',', 1) as size
from products p join
product_details pd
on p.product_id = qpd.product_id
where p.category = 'home'
group by p.product_id;
表达式substring_index(group_concat(. . .))
选择一种type
(和一种size
),并优先使用red
类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.