SQL使用多个查询从同一个表中获取多个值(来自同一列)

时间:2014-11-06 07:31:17

标签: mysql sql

我试图通过运行两个查询来获取表中同一列的值列表。

这就是表格的样子:

******************************************
 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很新,所以我不确定应该做些什么来实现我想要的。

非常感谢任何帮助。

3 个答案:

答案 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

相关问题