[英]MySQL: Combining two SELECT statements to show only intersecting rows
我正在构建一个搜索功能,其中我必须组合两个SELECT语句并仅显示相交的行(即,如果分别运行,则两个SELECT语句中都会出现的行)。
例如,假设我有两个表。
一种叫做fruits
,另一种叫做vegetables
。 每个表有十行。
第一个陈述...
SELECT * FROM `fruits` WHERE 1
...将显示所有10种水果。
第二条语句...
SELECT t1.*
FROM fruits t1, vegetables t2
WHERE t1.`color` = t2.`color`
...将显示2个水果。
如果我像这样结合这两个选择语句...
SELECT * FROM `fruits` WHERE 1
UNION
SELECT t1.*
FROM fruits t1, vegetables t2
WHERE t1.`color` = t2.`color`
...结果显示所有10种水果,这不是我想要的。
那么,如何修改上面的语句,使其仅显示相交的行(应该给我2个结果)?
我需要保持第一个SELECT语句完整无缺,并加入第二个SELECT语句以仅产生相交的行。 这是因为我正在修改现有的搜索功能。
非常感谢!
编辑:从一点点谷歌搜索,我知道我想要的可以使用INTERSECT来实现,就像这样:
SELECT * FROM `fruits` WHERE 1
INTERSECT
SELECT t1.*
FROM fruits t1, vegetables t2
WHERE t1.`color` = t2.`color`
但这就是MS SQL。 我该如何完成以上...
那么,如何修改上面的语句,使其仅显示重叠的行(应该给我2个结果)?
下面的查询不是只为您提供正确的结果吗?
SELECT t1.*
FROM fruits t1, vegetables t2
WHERE t1.`color` = t2.`color`
它是内部联接,您可以将其重写为:
SELECT t1.*
FROM fruits t1
INNER JOIN vegetables t2 ON t1.`color` = t2.`color`
SELECT * FROM
(SELECT * FROM `fruits` WHERE 1) t1
INNER JOIN vegetables t2 ON t1.`color` = t2.`color`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.