在表中选择具有相同表中不同列的值条件的行

时间:2014-01-01 16:30:33

标签: php mysql sql select conditional

我有一个表格,用于表示订单中的项目,如下所示:

--------------------------------------------------
| id     |  item_id   |   item_name  |  order_id  |
--------------------------------------------------
| 1      |  12345     |   abcd       |  1001      |
--------------------------------------------------
| 2      |  55555     |   bbbb       |  1001      |
--------------------------------------------------
| 3      |  66666     |   cccc       |  1001      |
--------------------------------------------------
| 4      |  12345     |   abcd       |  1002      |
--------------------------------------------------
| 5      |  99999     |   yyyy       |  1002      |
--------------------------------------------------
| 6      |  12345     |   abcd       |  1003      |
--------------------------------------------------
| 7      |  98765     |   qqgg       |  1004      |
--------------------------------------------------
| 8      |  55112     |   ffdd       |  1004      |

我有一个item_id = 12345的项目,该项目有多个订单。

我想选择符合条件的所有项目:

  • 项目与item_id = 12345
  • 的订单相同

我尝试这个SQL命令,但我认为我的方法很糟糕。

SELECT item_name   
FROM item_order
WHERE order_id IN (
      SELECT order_id 
      FROM item_order
      WHERE item_id = 12345
)

结果,我想得到的是:

--------------------------------------------------
| id     |  item_id   |   item_name  |  order_id  |
--------------------------------------------------
| 2      |  55555     |   bbbb       |  1001      |
--------------------------------------------------
| 3      |  66666     |   cccc       |  1001      |
--------------------------------------------------
| 5      |  99999     |   yyyy       |  1002      |
--------------------------------------------------

感谢您的建议,如果主题混淆,我们感到抱歉。

1 个答案:

答案 0 :(得分:0)

好像你只是错过了另一部分病情:

SELECT item_name   
FROM   item_order
WHERE   order_id IN (
        SELECT order_id 
        FROM item_order
        WHERE item_id = 12345
)
AND     item_id != 12345