带有CASE的MySQL行子查询(多列)(不在where子句中)

时间:2010-01-31 20:01:54

标签: mysql

我想从同一个表中检索两列,但如果未设置当前行中的某个列,则。只需要检索一列,就没有问题。一旦我需要另一个列,似乎我需要另一个子查询与另一个case子句,但这似乎真的无效。我之前从未使用过Joins,但我认为它可能在case子句中非常复杂?!

我认为它的美妙之处在于它实际上只在少数情况下执行了(如我所听到的)浪费的子查询。

在文档中,我发现使用ROW()进行比较显然是可能的。是否有使用AS检索列的等效项?

感谢您的任何提示,如果它只适用于Joins,请给我一个正确的方向,因为它们看起来有点复杂,如果我只是继续,那么它可能会变得一团糟。

SELECT id, bekannt, (

CASE WHEN bekannt =  ''
    THEN (
        SELECT bekannt
        FROM vokabeln AS v2
        WHERE v2.id = vokabeln.hinweis
        LIMIT 1
    )
    ELSE NULL 
    END
) AS lueckentext, (

CASE WHEN bekannt =  ''
    THEN (
        SELECT hinweis
        FROM vokabeln AS v2
        WHERE v2.id = vokabeln.hinweis
        LIMIT 1
    )
    ELSE NULL 
    END
) AS lthinweis
FROM vokabeln
WHERE nutzer =  'test'

1 个答案:

答案 0 :(得分:1)

我将其编码为:

  SELECT
    v1.id, v1.bekannt, v2.bekannt AS lueckentext, v2.hinweis AS lthinweis
  FROM 
    vokabeln AS v1
    LEFT OUTER JOIN vokabeln AS v2
    ON (v1.bekannt='' AND v2.id = v1.hinweis)
  WHERE
    v1.nutzer='test'