如何使用外键从 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 根据投票表的外键从问题表中获取所有问题

如何借助一对多关系在 Django 中使用外键从课程中获取主题

如何编写一个查询,根据 ms 访问的子表中的外键获取信息?

如何从外键表中检索值?