mysql 3表JOIN以显示所有内容

dojqjjoe  于 2023-02-21  发布在  Mysql
关注(0)|答案(4)|浏览(147)

我想从我的3表查询,但我不知道我应该使用哪个JOIN。我想显示所有的table2的item_id和item_name,还显示stat和shipped from table3,即使它为NULL。还有,user_id from table1。
表一

CREATE TABLE table1(
    id NOT NULL AUTO_INCREMENT,
    user_name varchar(255),
);

表二

CREATE TABLE table2(
    id NOT NULL AUTO_INCREMENT,
    item_name varchar(255),
);

表三

CREATE TABLE table3 (
  id int NOT NULL AUTO_INCREMENT,
  user_id int NOT NULL,
  item_id int NOT NULL,
  stat tinyint NOT NULL,
  shipped tinyint NOT NULL,
  PRIMARY KEY (id),
  FOREIGN KEY (user_id) REFERENCES table1(id),
  FOREIGN KEY (item_id) REFERENCES table2(id)
);

我尝试了左内联接,但只得到了表3。
谢谢大家!

k2fxgqgv

k2fxgqgv1#

您可以使用左连接来实现这一点。左连接将确保结果中包含table2中的所有记录,即使table3中没有匹配的记录

SELECT t1.user_id, t2.item_id, t2.item_name, t3.stat, t3.shipped
FROM table2 t2
LEFT JOIN table3 t3 ON t2.id = t3.item_id
LEFT JOIN table1 t1 ON t1.id = t3.user_id;
bq8i3lrv

bq8i3lrv2#

由于您需要tabl2中的所有条目,因此应从tabl2开始,并使用left outer join或缩写left join添加其他表

SELECT 
    t1.user_name,
    t2.item_name,
    t3.user_id,
    t3.item_id,
    t3.stat,
    t3.shipped
FROM table2 t2
    LEFT JOIN table3 t3 ON t2.id = t3.item_id
    LEFT JOIN table1 t1 ON t3.user_id = t1.userid
nukf8bse

nukf8bse3#

您可以从table2开始,因为这是必需的表,而LEFT JOIN与其他两个表一起使用

SELECT 
    t1.user_name,
    t2.item_name,
    t3.user_id,
    t3.item_id,
    t3.stat,
    t3.shipped
FROM table2 t2
    LEFT JOIN table3 t3 ON t2.id = t3.item_id
    LEFT JOIN table1 t1 ON t1.id = t3.user_id
epggiuax

epggiuax4#

下面的查询从table2开始,因为您需要显示所有物料,即使它们的状态为NULL。假设table2table3之间的关系是1-1,则下面的查询将为每个物料显示一行。

SELECT T2.ID
      ,T2.Item_Name
      ,T3.Stat
      ,T3.Shipped
      ,T3.ID
      ,T1.UserName
FROM table2 T2
LEFT JOIN table3 T3
ON T3.Item_ID = T2.ID
LEFT JOIN table1 T1
ON T1.ID = T3.UserID

相关问题