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

时间:2014-04-29 04:11:18

标签: mysql sql select join

我正在构建一个搜索功能,我必须组合两个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 个答案:

答案 0 :(得分:1)

  

那么如何修改上述语句以便它只显示   重叠的行(应该给我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`

答案 1 :(得分:-1)

SELECT * FROM 
    (SELECT * FROM `fruits` WHERE 1) t1
INNER JOIN vegetables t2 ON t1.`color` = t2.`color`