如何使用外键从 2 个表中获取所有数据
Posted
技术标签:
【中文标题】如何使用外键从 2 个表中获取所有数据【英文标题】:How to get all data from 2 tables using foreign key 【发布时间】:2014-08-11 12:11:47 【问题描述】:这是将一个表一分为二的结果:
Table users:
user_id (pk, ai)
email
password
last_login
Table data:
user_id (fk to users.user_id)
data_1
data_2
只有一张表时选择一条记录:
SELECT users.email, users.password, data.data_1, data.data_2
FROM users,data
WHERE users.email='$user_email' AND users.user_id=data.user_id";
如何从两个表中获取行由 users.user_id=data.user_id 连接的所有记录?
Row1: email, password, data_1, data2
Row2: email, password, data_1, data2
Row3: email, password, data_1, data2
Row4: email, password, data_1, data2
...
【问题讨论】:
SELECT users.email, users.password, data.data_1, data.data_2 FROM users JOIN data ON users.user_id=data.user_id
这个问题已经被问过很多次了。这里有 1 个示例,仅来自快速谷歌搜索。 ***.com/questions/9853586/sql-join-multiple-tables
这只会根据给定的电子邮件抓取一条记录。我正在寻找加入 2 个表并获取所有行的方法(但只有电子邮件、密码、data_1 和 data_2 列)。
【参考方案1】:
要将 userData 表加入用户,请尝试以下操作:
SELECT u.user_id, u.email, u.password, u.last_login
FROM users u
JOIN userData ud ON (u.userID = ud.userID)
这将返回用户表中的用户 ID 与 userData 表中的用户 ID 匹配的所有数据。
编辑 此外,还有不同种类的连接:
内部 外层 左 正确有关此内容及其差异的更多信息,请查看此方便的参考: http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/
【讨论】:
【参考方案2】:使用明确的join
语法可以帮助您。将您的查询重写为:
SELECT
users.email, users.password, data.data_1, data.data_2
FROM
users
INNER JOIN
data
ON
users.user_id=data.user_id
WHERE
users.email='$user_email'
并获取所有没有 WHERE 条件的行:
SELECT
users.email, users.password, data.data_1, data.data_2
FROM
users
INNER JOIN
data
ON
users.user_id=data.user_id
它将关注点分开:连接表的条件与限制结果集的条件。
【讨论】:
【参考方案3】:SELECT users.email, users.password, data.data_1, data.data_2 FROM
users JOIN data ON users.user_id=data.user_id
WHERE users.email='$user_email';
【讨论】:
【参考方案4】:当两个表中有一个共同的字段匹配时,你必须使用内连接返回记录。 对于你的情况,前任
select * from table1
inner join table2 on table1.user_id=table2.user_id
将通过匹配公共字段返回两个表中的所有记录
【讨论】:
【参考方案5】:你试过了吗?
SELECT users.email, users.password, data.data1, data.data2
FROM users,data
WHERE users.user_id=data.user_id
还是这个?
SELECT users.email, users.password, data.data1, data.data2
FROM users inner join data on users.user_id=data.user_id
【讨论】:
【参考方案6】:我们可以做到 如下...
SELECT users.email, users.password, data.data_1, data.data_2
FROM users,data
WHERE users.user_id=data.user_id AND users.email='$user_email'
只需复制并过去上面的查询,您可能会得到预期的结果..
【讨论】:
它也是一个连接查询。它称为隐式连接,其中不使用 JOIN 关键字。以上是关于如何使用外键从 2 个表中获取所有数据的主要内容,如果未能解决你的问题,请参考以下文章
根据codeigniter中的外键从两个表中获取json编码数据
如何使用外键从Django的其他表中获取数据(Django的新手)
PHP Laravel 根据投票表的外键从问题表中获取所有问题