这是将单个表分成两部分的结果:
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
...
答案 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匹配。
修改强> 此外,还有不同类型的连接:
有关这方面及其差异的更多信息,请查看此方便的参考: 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
将通过匹配公共字段
返回表中的所有记录