Mysql连接表现得很奇怪

时间:2017-12-23 22:32:06

标签: mysql sql database

我有一个非常简单的查询,但我是初学者,我无法理解问题是什么,因为它在第二种情况下无法正常工作:

SELECT a.user_name, a.password, a.id, r.role_name
FROM accounts as a 
JOIN roles as r ON  a.role=r.id

result of the first query

SELECT accounts.user_name, accounts.password, accounts.id, roles.role_name 
FROM accounts
JOIN roles ON accounts.role=roles.id

result of the second query

SELECT *
FROM accounts as a 
JOIN roles as r ON  a.role=r.id

result of the third query

与外键关联的

accounts.roleroles.id。我尝试在第三个查询中使用*选择所有内容,但它甚至没有从第二个表中获取任何内容,只得到第一个表中的所有内容(如上一张照片中所示)。那可能是什么问题?

2 个答案:

答案 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的每个组合都运行良好。我不知道问题是什么,因为我不记得在桌子上做任何改变。