mysql - 连接/合并两个表,即兴/组成 "missing"条目

标签 mysql sql database missing-data

我有两个表,tbl_footbl_bar,我想在条款。但是,对于每个 tbl_bar.baz_id 来说,每个 tbl_foo.foo_id 应该有一行(即使 tbl_bar 中不存在这样的条目)。我该如何编写这样的查询?

下面有有关架构和我想要的结果的更多信息。

  • 编辑:每行必须有一个foo_idbaz_id
  • 编辑 2:添加了下面的 tbl_baz

期望的结果

+--------+--------+--------+------------+
| bar_id | baz_id | foo_id | some_field |
+--------+--------+--------+------------+
|      1 |    101 |      1 | foo        |
|      2 |    101 |      2 | bar        |
|      3 |    101 |      3 | baz        |
|   NULL |    101 |      4 | bin        |
|      4 |    102 |      1 | foo        |
|   NULL |    102 |      2 | bar        |
|      5 |    102 |      3 | baz        |
|   NULL |    102 |      4 | bin        |
+--------+--------+--------+------------+

表:tbl_foo

+--------+------------+
| foo_id | some_field |
+--------+------------+
|      1 | foo        |
|      2 | bar        |
|      3 | baz        |
|      4 | bin        |
+--------+------------+

表:tbl_bar

+--------+--------+--------+
| bar_id | baz_id | foo_id |
+--------+--------+--------+
|      1 |    101 |      1 |
|      2 |    101 |      2 |
|      3 |    101 |      3 |
|      4 |    102 |      1 |
|      5 |    102 |      3 |
+--------+--------+--------+

表:tbl_baz

+--------+
| baz_id |
+--------+
|    101 |
|    102 |
+--------+

SQL 架构

CREATE TABLE tbl_foo (
    foo_id INT,
    some_field VARCHAR(255),
    PRIMARY KEY (foo_id)
);

INSERT INTO tbl_foo VALUES
(1, 'foo'),
(2, 'bar'),
(3, 'baz'),
(4, 'bin');

CREATE TABLE tbl_bar (
    bar_id INT,
    baz_id INT,
    foo_id INT,
    PRIMARY KEY (bar_id, baz_id),
    FOREIGN KEY (baz_id) REFERENCES tbl_baz (baz_id),
    FOREIGN KEY (foo_id) REFERENCES tbl_foo (foo_id)
);

INSERT INTO tbl_bar VALUES
(1, 101, 1),
(2, 101, 2),
(3, 101, 3),
(4, 102, 1),
(5, 102, 3);

CREATE TABLE tbl_baz (
    baz_id INT,
    PRIMARY KEY (baz_id)
);

INSERT INTO tbl_baz VALUES
(101),
(102);

最佳答案

就像 mwigdalh 所说的那样,没有办法使用给定的表来实现该输出。如果还有一张 baz 表,那就有办法了。问题是下面突出显示的记录基本上是凭空捏造的,毫无意义。您可以轻松地将“meh”放入每一个中,并且输出也同样有意义。

+--------+--------+--------+------------+
| bar_id | baz_id | foo_id | some_field |
+--------+--------+--------+------------+
|      1 |    101 |      1 | foo        |
|      2 |    101 |      2 | bar        |
|      3 |    101 |      3 | baz        |
|   NULL |   *101*|      4 | bin        |
|      4 |    102 |      1 | foo        |
|   NULL |   *102*|      2 | bar        |
|      5 |    102 |      3 | baz        |
|   NULL |   *102*|      4 | bin        |
+--------+--------+--------+------------+

如果您在更接近现实世界的示例中提供一些上下文,可能会发现完全不同的输出可以实现您想要的结果。

关于mysql - 连接/合并两个表,即兴/组成 "missing"条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10011902/

相关文章:

mysql - JOIN 上的重复结果

sql - 如何防止 MySQL 命令行 shell 界面中的 SQL 注入(inject)?

MySQL 搜索产品及其属性

mysql - 为什么MySQL从4.1升级到5.1后每晚都会修复一个表?

python - 在python中上传web文件到mysql

php - 如何更新我的查询以符合启用的 sql_mode=only_full_group_by?

mysql - 优化查询 : Select in Select

MySQL别名和表名

mysql - 在这种情况下,GUID 是地址的良好引用键吗?

mysql - 在同一台服务器上导入两个具有相同架构(数据库名称)的不同 mysql 转储文件