gpt4 book ai didi

sql - MySQL 需要帮助构建查询 : join multiple tables into single row

转载 作者:可可西里 更新时间:2023-11-01 07:29:25 24 4
gpt4 key购买 nike

如果这个问题已经被问到并得到回答,请原谅我,我已经搜索并找到了一些看起来相似的问题,但我是 SQL 的新手,无法根据我的需要调整它们。如果我没有使用正确的术语,也请原谅我,我知道当有人问问题并且他们甚至不知道足够的知识来询问他们需要什么时,这会很烦人。

<2nd EDIT Mar22:>

好吧,我不明白源数据到底是什么样子的,这就是我得不到我想要的东西的原因。感谢@goran 插入我将真正的源表发布到这里(我仍然不打算发布,因为我懒得对它们进行适当的编辑以便于查看和保护无辜者,但我应该有至少在询问之前将它们打印出来)。下面是新修改的示例表,但我仍然没有弄清楚如何实现将所有内容都放在一行中的最终目标。

table_one:

id  name          total
5 John Doe 20

表_二:

id  product_id    price
5 51 17

表三:

id  text       number
5 Subtotal 17
5 Tax 3
5 Total 20

我正在寻找的是这样的:

id name     total product_id price text     number text number text   number
5 John Doe 20 51 17 Subtotal 17 Tax 3 Total 20

我不再确定以下信息的有效性,但我暂时将其留在这里,希望它不会让新读者对这个问题感到困惑。

我正在帮助一个 friend 收集一些数据,并且需要执行一个查询,使每条记录产生一行,但我却得到了多行。这是我现在正在查询的示例(经过简化,希望不要太多):

SELECT * FROM `table_one` AS t1 
INNER JOIN `table_two` AS t2 ON t1.id = t2.id
INNER JOIN `table_three` AS t3 ON t1.id = t3.id
WHERE 1

结果是:

id  text       number
5 Subtotal 17
5 Tax 3
5 Total 20

我需要的是创建一个结果更像这样的查询:

id  text       number  text  number  text   number
5 subtotal 17 Tax 3 Total 20

如有任何帮助/指导,我们将不胜感激。

谢谢!

--杰德

最佳答案

我认为您确实在某处简化了它。您引用的查询将完全返回您想要的内容。这是一个例子(从单个表中选择两次给出了与你所拥有的类似的情况)

mysql> select * from test t1 join test t2 on t1.a = t2.a LIMIT 1,5;
+------+------+------+------+
| a | b | a | b |
+------+------+------+------+
| 1 | 2 | 1 | 1 |
| 1 | 1 | 1 | 2 |
| 1 | 2 | 1 | 2 |
| 2 | 2 | 2 | 2 |
| 2 | 2 | 2 | 2 |
+------+------+------+------+
5 rows in set (0.00 sec)

Mysql 用相同的标签标记结果集列没有问题。我猜您的原始查询在选择部分选择了 t1.*。

如果你想引用名称不明确的个别字段,你会得到

mysql> select a from test t1 join test t2 on t1.a = t2.a LIMIT 1,5;
ERROR 1052 (23000): Column 'a' in field list is ambiguous

而且你必须准确指定你想要的(列别名是可选的,你也可以做 t1., t2.)

mysql> select t1.a first, t2.a second from test t1 join test t2 on t1.a = t2.a LIMIT 1,5;
+-------+--------+
| first | second |
+-------+--------+
| 1 | 1 |
| 1 | 1 |
| 1 | 1 |
| 2 | 2 |
| 2 | 2 |
+-------+--------+
5 rows in set (0.00 sec)

编辑 22MAR更改示例数据后,您似乎希望将一个表中的多行变成一个。这是一个特定的解决方案(假设您总是有 Tax、Total 和 Subtotal 行,并且您只对这些行感兴趣)。

SELECT t1.id, t1.name, t2.product_id, t2.price, t3a.number subtotal, t3b.number total, t3c.number tax
FROM `table_one` AS t1
INNER JOIN `table_two` AS t2 ON t1.id = t2.id
INNER JOIN `table_three` AS t3a ON t1.id = t3a.id and t3a.text = "Subtotal"
INNER JOIN `table_three` AS t3b on t3a.id = t3b.id and t3b.text = "Total"
INNER JOIN `table_three` AS t3c on t3b.id = t3c.id and t3c.text = "Tax"

(如果你愿意,你也可以在选择部分选择常量“Tax”、“Total”和“Subtotal”,并给它们一些列名)

仍然不清楚的一件事是表中 id 之间的关系 - 它们是 table_one 还是 table_two 的主键。当然,当您在 table_one 和 table_two 中有多行时,这会影响结果。

关于sql - MySQL 需要帮助构建查询 : join multiple tables into single row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2485210/

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