“单行子查询返回多行”错误不清楚



>我有两个表。第一个保存一个类型,第二个保存此类型的值。在我的示例中,如果有更多的值"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或类似的东西,但我不太清楚我应该怎么做。

由于子查询 [can] 返回多个值,因此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)

=(等号(用于分配单个值。

除了简单的修复(使用 IN 而不是 id=(,您还可以使用更简单的查询版本:

SELECT DISTINCT id FROM name WHERE text1='first_name' 
and id in (
SELECT name_id FROM value WHERE text2='john')
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');

或者,如果您只期望一行,则必须查看数据库的逻辑和行为。

你可以改变其中 id=自其中 ID 在

最新更新