>我有两个表。第一个保存一个类型,第二个保存此类型的值。在我的示例中,如果有更多的值"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 在