我试图通过运行两个查询来获取表中同一列的值列表。
这就是表格的样子:
******************************************
Key | Short_text | UID | Boolean_value
******************************************
Name | John | 23 | null
******************************************
Male | NULL | 23 | true
******************************************
Name | Ben | 45 | null
******************************************
Male | NULL | 45 | true
如果基于UID的Male行的布尔值为true,我试图获取NAME行的SHORT_TEXT
这是我到目前为止(这是一个错误:子查询返回的值超过1。当子查询跟随=,!=,<,< =,>,> =时,不允许这样做或者当子查询用作表达式时。 )
SELECT SHORT_TEXT_VALUE
FROM Table
WHERE ((SELECT UID
FROM Table
WHERE KEY = 'NAME') =
(SELECT CUSTOMER_UID
FROM Table
WHERE KEY = 'Male'
AND BOOLEAN_VALUE = 1))
我对sql很新,所以我不确定应该做些什么来实现我想要的。
非常感谢任何帮助。
答案 0 :(得分:2)
你可以自己加入你的桌子:
SELECT
t1.UID,
t1.Short_text
FROM
tablename t1 INNER JOIN tablename t2
ON t1.UID=t2.UID
WHERE
t1.Key='Name' AND t2.Key='Male' AND t2.Boolean_value=TRUE
或以EXISTS:
SELECT
t1.UID,
t1.Short_text
FROM
tablename t1
WHERE
t1.Key='Name' AND
EXISTS (SELECT * FROM tablename t2
WHERE t1.UID=t2.UID AND t2.Key='Male' AND t2.Boolean_value=1)
答案 1 :(得分:1)
我不确定你要完成什么,但基于你的代码,我认为这就是你想要的
SELECT SHORT_TEXT_VALUE
FROM Table
WHERE KEY='Name'
and UID in(SELECT UID
FROM Table
WHERE KEY = 'Male'
AND BOOLEAN_VALUE = 1)
但是更重要的是。您可能想要考虑重新设计表格设计。为什么特定uid的男性细节在另一行?
答案 2 :(得分:1)
您可以尝试使用子查询,试试这个:
SELECT Short_text
FROM table
WHERE uid in (SELECT uid FROM table WHERE boolean_value = "true")
AND Short_text IS NOT NULL
确保Male行的值为(NULL)而不是带" NULL"
的字符串顺便说一下。此表与数据库表的规范化形式不匹配。请阅读the introduction to database normalization