mysql - SQL 左外连接 n :m connection table

标签 mysql sql left-join

我想要一个左外连接,其间有一个 n:m 连接表。

Table A 
   column: id_a

Table A:B
   column: id_a
   column: id_b

Table B
   column: id_b

表 b 保存所有可能的行。所以 B 列必须位于左侧。

我不知道如何呈现 1 个表 A 的所有可能值。我想显示所有整体和缺失的值(这就是为什么留在外面)

使用MySql

示例数据。

篮子(表A)

 1 | basket x
 2 | basket y

水果(表B)

1 | apple
2 | strawberries
3 | grapes
4 | lemon

连接表

1 | 1
1 | 2
2 | 1
2 | 2
2 | 3

结果 购物篮 X 查询的结果

1 | 1
1 | 2
1 | 3  (something which indicates it is not assigned . since there is no connection )
1 | 4  (something which indicates it is not assigned . since there is no connection )

最佳答案

我认为您需要一个笛卡尔结果。考虑以下示例,

declare @baskets table(basket_id int not null primary key identity, basketName varchar(255));
declare @fruits table(fruit_id int not null primary key identity, fruitName varchar(255));
declare @basketsFruits table(basket_id int not null, fruit_id int not null);

insert into @baskets(basketName)
    values('basket x'), ('basket y');

insert into @fruits(fruitName)
    values('apple'), ('strawberries'), ('grapes'), ('lemon');

insert into @basketsFruits(basket_id, fruit_id)
    values(1, 1), (1, 2), (2, 1), (2, 2), (2, 3);


select  b.*, f.fruitName
        , case when exists(select 1 from @basketsFruits as bf where bf.basket_id = b.basket_id and bf.fruit_id = f.fruit_id) then
            'Fruit Present'
        else
            'Fruit not Present'
        end as fruitStatus
from    @baskets as b, @fruits as f     -- cartesian all the fruits and all the baskets
where   b.basket_id = 1

结果:

query results

关于mysql - SQL 左外连接 n :m connection table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41929184/

相关文章:

mysql - 更改mysql输出列宽

c# - NHibernate 不只保存一个属性

MySQL 查询数据库中特定用户的连接+计数

php - MySQL INSERT - 在查询中使用 for() 循环并默认将非设置值插入为 ""?

javascript - 调用 javascript 函数时无法读取 $_POST 数据

php - 如何使用PHP文件将数据从MySQL导入到Processing?

MySQL获取多列上连接的每个组的最大值

sql - 如何检查分配给 oracle 数据库中模式、角色的对象的权限(DDL、DML、DCL)?

mysql限制连接

r - left_join 用于 tbl : na_matches not working