如何使用外键从2个表中获取所有数据

时间:2014-06-20 17:03:47

标签: mysql sql

这是将单个表分成两部分的结果:

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
...

6 个答案:

答案 0 :(得分:16)

使用显式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

它分离了关注点:连接表的条件以及限制结果集的条件。

答案 1 :(得分:3)

你试过这个吗?

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

答案 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)

这将返回所有数据,其中Users表中的用户ID与userData表中的用户ID匹配。

修改 此外,还有不同类型的连接:

  • INNER
  • OUTER
  • LEFT
  • RIGHT

有关这方面及其差异的更多信息,请查看此方便的参考: http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

答案 3 :(得分:1)

我们可以在不使用连接查询的情况下完成 如下......

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'

只需复制并通过上述查询即可获得预期结果..

答案 4 :(得分:0)

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';

答案 5 :(得分:0)

你必须使用内连接,当两个表中有一个公共字段匹配时返回记录。 在你的情况下为前

select * from table1 
  inner join table2 on table1.user_id=table2.user_id

将通过匹配公共字段

返回表中的所有记录