我有以下表格:用户,属性,属性值,用户属性值。
不要问我为什么选择这样构造表,我只是想通过使用不同的想法来学习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 |
+--+---------+---------------+
1条答案
按热度按时间qnzebej01#
不要在句子中使用逗号
FROM
条款。始终使用适当的、明确的、标准的JOIN
语法。正确的连接可能会解决您的问题:
我不知道这是怎么回事
WHERE
条款应该是这样做的。我想你真的想WHERE u.id = 1
基于样本结果。