我希望我的数据库在以下两种情况之一下返回行:
value
“val”,且为type
“sometype”type
“sometype”和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
。
答案 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'));
还考虑在没有子查询的情况下重写