【问题标题】:MySQL INNER JOIN USEMySQL 内部连接使用
【发布时间】:2017-08-30 09:28:47
【问题描述】:

我有两张桌子:

+-----------------------+
| Tables_in_my_database |
+-----------------------+
| orders                | 
| orderTaken            | 
+-----------------------+

在订单中,有orderIdorderName等属性。
在 orderTaken 中,有 userIdorderIdorderStatus 等属性。

基本上,我的项目的机制是这样运行的:
具有唯一 userId 的用户将能够从网页接受订单,其中每个订单也有自己唯一的 orderId。取完后,orderTaken表会记录userId,orderId,初始设置orderStatus = 1

现在,我想选择orderStatus = 1 所在的一位用户接受的订单,但我还需要显示订单表中的订单名称。我已经学习了内部联接并编写了一个查询:

SELECT * FROM orders
WHERE orders.orderId IN
(SELECT orderId FROM orderTaken
WHERE orderTaken.userId = '8' AND orderTaken.orderStatus = '1')
INNER JOIN orderTaken ON orders.orderId = orderTaken.orderId

然而,MySQL 一直抱怨语法错误。我想我不能以这种方式使用内部连接?有人可以纠正我吗?谢谢!

【问题讨论】:

  • 请去掉php标签,这与php无关
  • 哦,是的,抱歉,因为我使用 php 来执行查询,并且默认情况下它就在那里,所以我把它留在那里。我已将其删除。

标签: mysql select join inner-join


【解决方案1】:
SELECT * FROM orders
INNER JOIN orderTaken ON orders.orderId = orderTaken.orderId
WHERE orderTaken.userId = '8' AND orderTaken.orderStatus = '1'

你把它弄得太复杂了。这将起作用。

我认为userId 的引号是正确的,但如果它们的数据类型为INT,那么您应该删除它们。

如果您想阅读JOINs 的相关信息,请查看这些链接

【讨论】:

    【解决方案2】:

    这样试试

    SELECT * 
       FROM (orders INNER JOIN ordersTaken ON orders.orderId = orderTaken.orderId) 
       WHERE orderId IN 
        (SELECT orderId 
         FROM orderTaken 
         WHERE orderTaken.userId = '8' AND orderTaken.orderStatus = '1')
    

    【讨论】:

    • 感谢 ImmersionULTD!但是在我运行您的查询后,我得到 MySQL 说:文档 #1052 - IN/ALL/ANY 子查询中的列 'orderId' 不明确
    猜你喜欢
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2011-12-02
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多