Sql 初学者多连接问题

Sql 初学者多连接问题,sql,mysql,join,Sql,Mysql,Join,小型交易系统有3个表用户、项目和交易,这些交易本身被保存在表格交易中(逻辑上足够),如下所示: 我想显示挂起的交易,使用3路连接将ID映射到用户和项目表中的名称。到目前为止,我已经: SELECT users.name AS seller, items.id AS item_id, items.name AS item, trades.item_id AS trade_id, trades.quantity AS quantity, trades.

小型交易系统有3个表用户项目交易,这些交易本身被保存在表格交易中(逻辑上足够),如下所示:

我想显示挂起的交易,使用3路连接将ID映射到用户和项目表中的名称。到目前为止,我已经:

SELECT
    users.name AS seller,
    items.id AS item_id,
    items.name AS item,
    trades.item_id AS trade_id,
    trades.quantity AS quantity,
    trades.cost AS cost,
    trades.currency AS currency 
FROM
(trades INNER JOIN users ON trades.seller_id = users.id) 
INNER JOIN items ON trades.item_id = items.id 
WHERE trades.buyer_id = xxx

第一个连接工作正常,但一旦我将结果传递给第二个连接,它就会失败;返回零数据。我已经准备好了,因为它是一个真正的noobie问题(事实上我希望它是,容易解决=好),但我看不到它(可能是因为我在这些事情上实际上是一个Noobe)。

我认为交易id应该是交易。物品id


我还建议您使用左连接而不是内部连接,只有在不匹配的情况下想要触发错误时才使用内部连接。当您使用LEFT JOIN时,它总是返回数据,当第二个表中没有匹配项时也是如此。请参阅:

我能看到此操作不起作用的唯一原因是items表中不存在item\u id。对于内部联接,您的意思是表中必须至少存在一个具有该id的项。@user628935-请先尝试使用左联接,看看是否获得了正确的数据。还有,是否真的有一个值为xxx的买方id?我使用了左连接,以防表中缺少数据,但您比我更了解您的数据。所以,用你所知道的。乔恩,谢谢你,这是正确的。天哪,我还以为我也在想这件事呢。嘿嘿,回到课本上来。但是谢谢。@user628935-没问题,请不要忘记接受答案,这样线程基本上是关闭的。你完全正确,雷,我为这个错误道歉。然而,它打开了一些我不知道和需要知道的东西,如此自私,对我来说是有用的。谢谢你。
SELECT
    users.name AS seller,
    items.id AS item_id,
    items.name AS item,
    trades.item_id AS trade_id,
    trades.quantity AS quantity,
    trades.cost AS cost,
    trades.currency AS currency 
FROM
(trades INNER JOIN users ON trades.seller_id = users.id) 
INNER JOIN items ON trades.item_id = items.id 
WHERE trades.buyer_id = xxx
SELECT 
      users.name AS seller, 
      items.id AS item_id, 
      items.name AS item, 
      trades.item_id AS trade_id, 
      trades.quantity AS quantity, 
      trades.cost AS cost, 
      trades.currency AS currency   
FROM 
      trades
LEFT JOIN 
      users 
ON 
      trades.seller_id = users.id
LEFT JOIN 
      items 
ON 
      trades.item_id = items.id
WHERE trades.buyer_id = xxx