繁体   English   中英

MySQL:合并两个SELECT语句以仅显示相交的行

[英]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。 我该如何完成以上...

  1. 使用MySQL?
  2. 同时保持第一个SELECT语句完整吗?

那么,如何修改上面的语句,使其仅显示重叠的行(应该给我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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM