我正在构建一个搜索功能,我必须组合两个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。我如何完成上述工作......
答案 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`