我有两张桌子。
第一个持有一个类型,第二个持有这种类型的值。
在我的示例中,如果有更多值'john'为'first_name',我会得到:single-row subquery returns more than one row
SELECT DISTINCT id FROM name WHERE id=(
SELECT id FROM name WHERE text1='first_name' INTERSECT
SELECT name_id FROM value WHERE text2='john');
我对sql不是很了解。我应该使用LEFT JOIN
或类似的东西,但我不清楚我应该怎么做。
答案 0 :(得分:2)
由于子查询[可以]返回多个值,IN
比=
更好用
SELECT DISTINCT id
FROM name
WHERE id IN (
SELECT id FROM name WHERE text1='first_name'
INTERSECT
SELECT name_id FROM value WHERE text2='john');
IN
与OR
相同,例如:
SELECT *
FROM tableName
WHERE a = 4 or a = 5 or a = 6
可以写成
SELECT *
FROM tableName
WHERE a in (4,5,6)
=
(等号)用于分配单个值。
答案 1 :(得分:1)
除了简单的修复(使用IN而不是id =),您还可以使用稍微简单的查询版本:
SELECT DISTINCT id FROM name WHERE text1='first_name'
and id in (
SELECT name_id FROM value WHERE text2='john')
答案 2 :(得分:0)
SELECT id FROM name WHERE text1='first_name' INTERSECT
SELECT name_id FROM value WHERE text2='john');
此查询返回多行,然后您应该使用IN
子句,如此处
SELECT DISTINCT id FROM name WHERE id IN (
SELECT id FROM name WHERE text1='first_name' INTERSECT
SELECT name_id FROM value WHERE text2='john');
或者,如果您只想要一行,则必须检查数据库的逻辑和行为。
答案 3 :(得分:0)