在嵌套选择中获取对主选择行的引用

时间:2013-08-28 13:45:45

标签: mysql select

我希望我的数据库在以下两种情况之一下返回行:

  1. 该行包含特定的value“val”,且为type“sometype”
  2. 还有其他行,type“sometype”和name与当前选中的行相同。
  3. 为此,我提出了一个以下问题:

    SELECT c.name, c.value, c.type
       FROM `table` AS c
       WHERE
          c.type='sometype' AND c.value='val' 
          OR 
          c.type='othertype' AND 
             0<(SELECT count(*) FROM `table` AS d WHERE d.name=c.name and c.name='sometype')
    

    不幸的是,这将返回“othertype”的所有行。我只想要这些,有同名朋友和类型'sometype' 我认为问题在于,我不知道如何获取对于已经检查过的行(我认为是c.fieldname)中的值的引用。我相信d.name = c.name将返回与当前已检查行具有相同名称的所有行。但嵌套选择始终为>0

2 个答案:

答案 0 :(得分:1)

我认为这应该适用于你正在做的事情:

SELECT c.name, c.type, c.value
FROM test as c
INNER JOIN (SELECT name, type
            FROM test
            WHERE type = "type1"
            AND value = 3) as d
ON c.name = d.name AND c.type = d.type;

SQLFiddle:http://sqlfiddle.com/#!2/63255/1

内部选择得到你的#1,其中type =“sometype”和value =“val”。然后外部获取与内部选择的名称和类型相对应的名称,类型和值,这是您的#2。

答案 1 :(得分:0)

SELECT c.name
     , c.value
     , c.type
  FROM table c
 WHERE (c.type = 'sometype' AND c.value = 'val') 
    OR (c.type = 'othertype' AND 0< (SELECT COUNT(*) FROM `table` d WHERE d.name = c.name AND c.name='sometype'));

还考虑在没有子查询的情况下重写