SQL - 将值传递给同一个表上的嵌套选择查询,而不选择该值

时间:2017-01-18 08:06:37

标签: mysql sql

所以,我需要从存储键和值的表中提取一些元数据,所以我首先选择一个特定的键来进行SELECT查询,(key_a),然后再创建另一个查询保持id并瞄准另一种数据类型(key_b),以下是我所拥有的代码的简化:

SELECT
    id AS param,
    val as key_a,
    (
        SELECT val
        FROM table
        WHERE key = 'key_b' AND id = param
    ) AS key_b

FROM table

WHERE val = 'key_a'

我想要的是在没有SELECT查询选择id字段的情况下实现此目的。尝试删除id AS param,行并将param替换为idtable.id到目前为止还没有奏效。我有点迷失在这里,因为这是我第一次使用嵌套查询而无法找到有关相同表嵌套查询的任何内容。

我做错了吗?

3 个答案:

答案 0 :(得分:2)

所以你的问题是,你必须将列id与自己进行比较,对吧?然后只是别名表名而不是列。

SELECT
    val as key_a,
    (
        SELECT val
        FROM table b
        WHERE key = 'key_b' AND id = a.id
    ) AS key_b
FROM table a
WHERE val = 'key_a'

答案 1 :(得分:1)

使用联接。如果表是相同的表,请使用自联接。

SELECT
   a.val as key_a,
   b.val AS key_b
FROM table a
LEFT JOIN table b ON b.id = a.id AND b.key = 'key_b'
WHERE a.val = 'key_a'  -- perhaps you meant a.key here?
;

答案 2 :(得分:0)

SELECT DISTINCT A.id as param,
  (SELECT B.val from table B where B.id = A.id and B.key = 'key_a'),
  (SELECT C.val from table C where C.id = A.id and C.key = 'key_b') 
from table A

我不确定你想要什么,但希望这可以解决你的问题