我有一个非常简单的查询,但我是初学者,我无法理解问题是什么,因为它在第二种情况下无法正常工作:
SELECT a.user_name, a.password, a.id, r.role_name
FROM accounts as a
JOIN roles as r ON a.role=r.id
SELECT accounts.user_name, accounts.password, accounts.id, roles.role_name
FROM accounts
JOIN roles ON accounts.role=roles.id
SELECT *
FROM accounts as a
JOIN roles as r ON a.role=r.id
与外键关联的
accounts.role
和roles.id
。我尝试在第三个查询中使用*
选择所有内容,但它甚至没有从第二个表中获取任何内容,只得到第一个表中的所有内容(如上一张照片中所示)。那可能是什么问题?
答案 0 :(得分:1)
此行为没有意义,使用*
让我们对SQL Fiddle
进行测试MySQL 5.6架构设置:
create table t1 ( i int, a char);
insert into t1 values (1,'a');
create table t2 ( i int, b char);
insert into t2 values (1,'a');
查询1 :
select *
from t1 inner join t2 on t1.i = t2.i
<强> Results 强>:
| i | a | i | b |
|---|---|---|---|
| 1 | a | 1 | a |
查询2 :
select *
from t1 x inner join t2 y on x.i = y.i
<强> Results 强>:
| i | a | i | b |
|---|---|---|---|
| 1 | a | 1 | a |
您可以看到所有字段都出现的所有时间。可能是您用于连接和进行查询的程序的问题。检查两次你执行所有句子,不仅是第一行2行,还检查它们是否是滚动条以查看更多数据。
答案 1 :(得分:0)
我用给定的代码重新启动了数据库:
passwords4.txt
现在,SELECT的每个组合都运行良好。我不知道问题是什么,因为我不记得在桌子上做任何改变。