我有一个表名item_data,其中包含以下列和值:
id | name |value | price | matching_item
1 | item1| 5 | 1500 | NULL
2 | item2| 6 | 1700 | NULL
3 | item3| 4 | 500 | item1
4 | item3| 8 | 2000 | NULL
我使用了一个选择查询:
SELECT * from `item_data` WHERE (value = 4) AND (price > 100);
然后它给了我这样的结果:
id | name | value | price | matching_item
3 | item3| 4 | 500 | item1
但我想要一个给我结果的查询:
id | name | value | price | matching_item
3 | item3| 4 | 500 | item1
1 | item1| 5 | 1500 | NULL
我想要配对结果。
答案 0 :(得分:0)
也许你只需要改变你的条件:
SELECT * from item_data WHERE value IN (4,5) AND (price > 100)
答案 1 :(得分:0)
如果没有真正了解您的问题(请更具描述性),我猜您是想将找到的结果中的matching_item列加回到name列并返回包含找到结果的行?
如果是这样,请考虑使用UNION来获得所需的结果:
SELECT i.*
FROM Item_Data i
LEFT JOIN Item_Data i2 on i.matching_item = i2.name
WHERE i.value = 4 and i.price > 100
UNION
SELECT i2.*
FROM Item_Data i
INNER JOIN Item_Data i2 on i.matching_item = i2.name
WHERE i.value = 4 and i.price > 100
这是一种不使用UNION的不同方法:
SELECT i3.*
FROM Item_Data i
LEFT JOIN Item_Data i2 on i.matching_item = i2.name
LEFT JOIN Item_Data i3 on i3.id in (i.id, i2.id)
WHERE i.value = 4 and i.price > 100
答案 2 :(得分:0)
好像你想要这个:
select *
from item_data i
where exists (select *
from item_data d
WHERE
(
value = 4
AND price > 100
and i.id = d.id
)
or i.name = d.matching_item);
返回结果:
| ID | NAME | VALUE | PRICE | MATCHING_ITEM |
----------------------------------------------
| 1 | item1 | 5 | 1500 | (null) |
| 3 | item3 | 4 | 500 | item1 |