如果我想提升自己的职业生涯,我需要学习使用更高级的SQL功能。我承认我不知道连接是什么或如何使用它们。我开始用连接阅读查询,我的大脑变得糊涂了,但我遇到了一种情况,我可能会从使用连接中受益,但我不知道我想做什么甚至可能。
考虑以下表格:
用户
id | user_name | location_id
===============================
1 | r3wt | 316
位置
id | state | city
=========================
316 | Clarksville | Arkansas
现在,当我选择用户时,我会找回像
这样的数组[
id => 1,
user_name => r3wt ,
location_id =>316
]
我想回来的是:
[
id => 1,
user_name => r3wt ,
location_id =>[
id=>316,
city=>Clarksville,
state=>Arkansas
]
]
我想知道这是否可能,如果是这样,我怎么可能改变我的相当乏味的选择查询,使这成为可能。谢谢,如果你需要更多的细节或者想要让我自己想出一个可怜的尝试,我愿意让自己难堪学习。谢谢
我可怜的小尝试当然不起作用:
SELECT id, user_name, location AS location_id
FROM user JOIN location ON location.id = user.location_id
请记住,我完全不知道自己在做什么。我甚至不了解连接是什么以及它们是如何工作的,但我理解我希望能用SQL做什么。
答案 0 :(得分:2)
你应该:
SELECT u.id, u.name, u.location_id, l.city, l.state
FROM user u -- identify columns from user table with 'u.'
LEFT OUTER JOIN location l -- identify columns from location with 'l.'
ON u.location_id = l.id --- the join predicate when the two ids match
WHERE l.state = 'Arkansas' -- other selection criteria
这将为您提供几乎你想要的东西,但是作为单个平面阵列: -
[
u.id => 1,
u.user_name => r3wt ,
u.location_id => 316,
l.city=>Clarksville,
l.state=>Arkansas
]
SQL结果始终是二维表。这是SQL工作方式的基础! " LEFT OUTER"表示如果没有位置,您希望结果中的城市和州的空值。
只是google" MYSQL TUTORIAL"你会发现许多网站免费提供在线指南。因为我在史前学到了所有这些东西,所以不能推荐一个特定的。
答案 1 :(得分:1)
联接用于组合2个或更多表以从中获取结果。有几种类型的联接,你可以在这里阅读它们:http://www.w3schools.com/sql/sql_join.asp
重要的是要记住,MySql在您的示例中返回行,如果讨论中用户可以有几个您不会使用连接的位置 - 或者如果您使用连接,则将有多行用户ID和他有不同的地点。
在您的示例中,对于具有一行位置的用户,您可以运行此查询
SELECT *
FROM user
INNER JOIN location
ON user.location_id=location.id;
此查询将返回具有位置记录的所有用户的行,您将获得两个表的所有字段(如我们所使用的*)。