【问题标题】:Select rows in table with condition of value of different column in same table选择表中具有同一表中不同列的值条件的行
【发布时间】:2014-01-19 04:13:24
【问题描述】:

我有一个表格,它代表订单中的项目,其列如下:

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

感谢您的建议,如果主题混淆了,我们深表歉意。

【问题讨论】:

  • 你想用item_id =12345获取什么订单?
  • 我想获取订单中所有不同的商品,其中出现了 id 为 12345 的商品

标签: php mysql sql select conditional


【解决方案1】:

似乎你只是错过了你身体状况的另一部分:

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

【讨论】:

  • 是的,你是对的 - 但第一个 WHERE 背后存在问题(我认为),因为结果不正确
  • 而且查询时间很长(比如60秒),有没有其他办法呢?
猜你喜欢
  • 1970-01-01
  • 2015-08-25
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
  • 2012-05-25
  • 1970-01-01
  • 2018-10-24
相关资源
最近更新 更多