0

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

  1. 该行包含特定的value“val”并且属于type“sometype”
  2. 还有其他行,确实具有type“某种类型”并且与name当前检查的行相同。

为此,我进行了以下查询:

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.

4

2 回答 2

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。

于 2013-08-28T14:09:22.417 回答
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'));

也可以考虑不使用子查询重写

于 2013-08-28T14:00:21.063 回答