gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 20:11:34 25 4
gpt4 key购买 nike

我有两个表,tbl_footbl_bar,我想用 tbl_foo.foo_id = tbl_bar.foo_id 加入这些表on子句。但是,对于每个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com