【问题标题】:Trouble joining two tables - No results连接两个表时遇到问题 - 没有结果
【发布时间】:2013-12-02 06:16:42
【问题描述】:

我有一个名为 phpbb_pcp_market 的表,其中包含以下行:http://pastebin.com/ZAFjawD8(显然还有更多)

我还有另一个名为 phpbb_pcp_market_cart 的表,如下所示:

+----+---------+-----------+------------+
| id | item_id | player_id | time       |
+----+---------+-----------+------------+
| 14 |      49 |         3 | 1384806292 |
+----+---------+-----------+------------+

我需要根据item_id 加入这两个表,但由于某种原因它不起作用。

这是我使用的查询:

SELECT m.*, c.* FROM (phpbb_pcp_market_cart c) 
    LEFT JOIN phpbb_pcp_market m 
        ON (c.item_id = m.item_id) 
    WHERE c.player_id = 3 
    ORDER BY c.time

由于某种原因,它什么也没返回。

我不知道我在查询中做错了什么。不,我不擅长 SQL。

【问题讨论】:

  • 根据您描述的数据,您的查询应该至少返回一行。您能否澄清“不返回任何内容”的含义以及您使用什么工具进行查询?
  • 什么都不返回我的意思是它返回 0 行。我正在使用 PHP 来执行该查询。
  • 我没看错。这个查询应该至少返回一行(如果你有一行phpbb_pcp_market_cart.player_id = 3,就像你说的那样。那么问题出在PHP代码上。
  • 确定购物车表中有一个 player_id = 3 吗?尝试删除 WHERE 子句,看看它是否返回任何行。然后尝试select * from phpbb_pcp_market_cart where player_id = 3 并查看是否返回任何具有正确 item_id 的行。数据(或您对它的理解)有问题,而不是查询。
  • 你的错误是什么,只是出于知识的原因?

标签: mysql sql select join left-join


【解决方案1】:

首先仔细检查您的数据,您的查询似乎没问题。

如果您想选择特定player_id 的所有项目,请不要使用LEFT JOIN,而应使用简单的JOIN,因为您永远不会得到可能为NULL 的行。 为简单起见,大括号也可以省略:

SELECT m.*, c.* FROM phpbb_pcp_market_cart c 
    JOIN phpbb_pcp_market m 
        ON c.item_id = m.item_id
    WHERE c.player_id = 3 
    ORDER BY c.time

【讨论】:

  • 我认为这不会有帮助。同意以上帖子;应首先检查数据。
  • 更改答案以更好地解释如何改进查询。
  • 我认为直接连接会更快,所以如果你不需要 NULL 行,这个想法很好。你也可以只使用SELECT m.*, c.* FROM phpbb_pcp_market_cart AS c, phpbb_pcp_market AS m WHERE c.item_id = m.item_id AND c.player_id = 3
【解决方案2】:

您的 SQL 代码看起来一切正常。

如果有问题,请查看其余的 PHP 代码。该错误与 SQL 部分无关;)

【讨论】:

    猜你喜欢
    • 2019-07-14
    • 1970-01-01
    • 2020-01-31
    • 2017-08-31
    • 2022-11-09
    • 2011-07-13
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多