【问题标题】:How to link tables with MYSQL JOIN? [closed]如何使用 MYSQL JOIN 链接表? [关闭]
【发布时间】:2020-02-19 01:44:40
【问题描述】:

有 4 张桌子。我想将所有表与当前 ID 链接起来。如果我查询的最后一个表中没有值,则数据不会返回。我想访问所有表中的数据。我应该如何处理?

我的代码:(部分工作)

SELECT 
    U.id AS id,
    U.amount AS amount,
    A.commission AS commission,
    I.power AS item_power
FROM affiliate AS A
     INNER JOIN users AS U
ON A.owner_id = U.id 
     INNER JOIN users_booster AS B
ON U.id = B.userid
     INNER JOIN auction_item AS I
ON B.item_id = I.id
    WHERE 
A.partner_id = '1947' AND 
I.type = 'reference_booster' AND
B.end_time >= NOW()
GROUP BY I.type

【问题讨论】:

  • “访问所有表中的数据”并没有清楚地描述您想要什么。也不是一堆箭头。没有人可以接受您所写的内容并知道您的查询应该做什么或为什么您认为它会这样做。 (他们可能会猜到。)使用足够多的单词、句子和对部分示例的引用来清楚完整地表达你的意思。在给出业务关系(船舶)/关联或表(基础或查询结果)时,说明其中的一行根据其列值说明了业务情况。请在代码问题中提供minimal reproducible example

标签: mysql sql join inner-join


【解决方案1】:

使用left join。并且不需要group by

SELECT U.id AS id, U.amount AS amount, A.commission AS commission,
      I.power AS item_power
FROM affiliate A JOIN
     users U
     ON A.owner_id = U.id JOIN
     users_booster B
     ON U.id = B.userid LEFT JOIN
     auction_item I
     ON B.item_id = I.id AND I.type = 'reference_booster'
WHERE A.partner_id = 1947 AND 
      B.end_time >= NOW();

注意事项:

  • 只要你想保留行,就使用LEFT JOIN,即使没有匹配。
  • LEFT JOINsecond 表的条件需要在ON 子句中。
  • 我想partner_id 是一个数字,所以不要将它与字符串进行比较。使用1947 而不是'1947'。当然,如果是字符串,请保留单引号。
  • GROUP BY 在没有聚合函数的情况下很少有意义。

【讨论】:

  • 如果没有属于用户的数据,则无法显示(1​​000)身份证号数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
  • 2013-11-04
  • 2013-03-28
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多