MySQL:SELECT查询

时间:2013-01-31 16:05:58

标签: mysql

我有一个表名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

我想要配对结果。

3 个答案:

答案 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

Fiddle

这是一种不使用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

Fiddle

答案 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);

请参阅SQL Fiddle with Demo

返回结果:

| ID |  NAME | VALUE | PRICE | MATCHING_ITEM |
----------------------------------------------
|  1 | item1 |     5 |  1500 |        (null) |
|  3 | item3 |     4 |   500 |         item1 |