gpt4 book ai didi

MySQL垂直连接多个表

转载 作者:行者123 更新时间:2023-11-29 17:45:41 24 4
gpt4 key购买 nike

我有以下表格:用户属性attribute_valuesuser_attribute_values

不要问我为什么选择这样构建表,我只是想通过尝试不同的想法来学习 SQL(更具体地说是 MySQL)。

表结构如下:

users
+--+
|id|
+--+
| 1|
+--+

attributes
+--+---------+
|id|attribute|
+--+---------+
| 1|name |
+--+---------+
| 2|age |
+--+---------+

attribute_values
+--+---------------+
|id|attribute_value|
+--+---------------+
| 1|John Doe |
+--+---------------+
| 2|30 |
+--+---------------+

user_attribute_values
+-------+------------+------------------+
|user_id|attribute_id|attribute_value_id|
+-------+------------+------------------+
| 1| 1| 1|
+-------+------------+------------------+
| 1| 2| 2|
+-------+------------+------------------+

我正在尝试找出一个会产生如下结果的查询:

+-------+---------+---------------+
|user_id|attribute|attribute_value|
+-------+---------+---------------+
| 1|name |John Doe |
+-------+---------+---------------+
| 1|age |30 |
+-------+---------+---------------+

或者更好的是,像这样:

+--+--------+---+
|id| name|age|
+-----------+---+
| 1|John Doe|30 |
+-------+-------+

请记住,正确的键和外键已添加到所有表中。

我能得到的最接近的是这样的:

SELECT `users`.`id`, `attributes`.`attribute`, `attribute_values`.`attribute_value`
FROM `users`, `attributes`, `attribute_values`, `user_attribute_values`
WHERE `users`.`id` = `user_attribute_values`.`user_id` AND `user_attribute_values`.`attribute_id` = 1 AND `user_attribute_values`.`attribute_value_id` = 1;

结果是:

+--+---------+---------------+
|id|attribute|attribute_value|
+--+---------+---------------+
| 1| name|John Doe |
+--+---------+---------------+
| 1| age|John Doe |
+--+---------+---------------+
| 1| name|30 |
+--+---------+---------------+
| 1| age|27 |
+--+---------+---------------+

最佳答案

切勿FROM子句中使用逗号。 始终使用正确、明确、标准的JOIN语法。

正确的连接可能会解决您的问题:

SELECT u.id, a.attribute, av.attribute_value
FROM users u JOIN
user_attribute_values uav
ON u.id = uav.user_id JOIN
attributes a
ON uav.attribute_id = a.id JOIN
attribute_values av
ON uav.attribute_value_id = av.attribute_value_id
WHERE av.id = 1 AND a.id = 1;

我不确定 WHERE 子句应该做什么。根据示例结果,我假设您确实想要 WHERE u.id = 1

关于MySQL垂直连接多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49837290/

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