`单行子查询返回多行`错误不明确

时间:2012-05-21 08:07:21

标签: sql

我有两张桌子。 第一个持有一个类型,第二个持有这种类型的值。 在我的示例中,如果有更多值'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或类似的东西,但我不清楚我应该怎么做。

4 个答案:

答案 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');

INOR相同,例如:

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)

你可以改变 WHERE id = 至 WHERE id IN