mysql - 尝试从具有默认值的两个表中选择每个组合

标签 mysql sql database

我的表结构如下:

table a:
id int
name varchar

table b:
id int
name varchar

table c:
id int
valid tinyint
table_a int
table_b int

基本上,表 c 在表 a 和表 b 之间映射,并且还有一个列来确定某些内容是否有效(1 或 0)。我希望能够从表 a 中选择每个名称(仅一次)并从表 c 中选择链接的“有效”列(如果不存在则默认为 0)并通过将 table_b 与 id 匹配来限制它。希望这是有道理的。


这里有一些示例数据可以帮助说明我的意思:

使用上面的表结构我有这个数据:

Table a:
(id, name)
1, row 1
2, row 2
3, row 3

Table b:
(id, name)
1, row a
2, row b

Table c:
(id, valid, table_a, table_b)
1, 1, 1, 1

现在,我要选择的是表 a 中的所有名称,c 中的“有效”列(如果没有匹配的行,则默认为 0)并将“有效”字段限制为 table_b = 1 . 希望这更有意义?

所以,我想返回以下 b.id = 1 的地方:

(a.name, c.valid)
row 1, 1
row 2, 0
row 3, 0

最佳答案

让我看看我是否明白了。您正在寻找这样的东西吗?

这个查询:

select a.name, coalesce(c.valid, 0) as IsValid, b.id from a
left join c on a.id = c.table_a
left join b on b.id = c.table_b

结果:

NAME    ISVALID ID
row 1   1       1
row 2   0   
row 3   0   

如果您想要所有 b.id = 1,那么您将不会拥有来自 table_a 的所有行。

select a.name, coalesce(c.valid, 0) as IsValid from a
left join c on a.id = c.table_a
left join b on b.id = c.table_b
where b.id = 1

NAME    ISVALID ID
row 1   1       1

关于mysql - 尝试从具有默认值的两个表中选择每个组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9249276/

相关文章:

mysql - 如何排序 LEFT JOIN 的结果

sql - 具有动态(未知)列数的 T-Sql 查询

java - 在 Hibernate 中限制成员集合的大小

mysql - 无法将 Delphi 应用程序连接到 mySQL 数据库

业务应用程序的 MySQL 数据类型?

mysql - 准备 STMT 语句给出语法错误

MySQL:使用两个匹配列将数据从一列更新到另一列

MySQL SELECT IN 单值

mysql - 如何使 MySQL 选择树结构?

php - 查找并替换 MySQL 表中的大括号标签