0

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

我想要配对结果。

4

3 回答 3

0

也许你只需要改变你的条件:

 SELECT * from item_data WHERE value IN (4,5) AND (price > 100)
于 2013-01-31T16:07:59.763 回答
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

还有小提琴

于 2013-01-31T16:15:45.010 回答
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

返回结果:

| ID |  NAME | VALUE | PRICE | MATCHING_ITEM |
----------------------------------------------
|  1 | item1 |     5 |  1500 |        (null) |
|  3 | item3 |     4 |   500 |         item1 |
于 2013-01-31T16:16:17.680 回答