Mysql 我的行为很奇怪

Mysql 我的行为很奇怪,mysql,sql,database,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 accounts.role和roles.id与外键链接。我尝试在第三个查询中使用*选择所有内容,但它甚至没有从第二个表中获取任何内容,只从上一张照片中的第一个表中获取了所有内容。那么问题

我有一个非常简单的问题,但我是这方面的初学者,我无法真正理解问题所在,因为在第二种情况下,它不能正常工作:

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

accounts.role和roles.id与外键链接。我尝试在第三个查询中使用*选择所有内容,但它甚至没有从第二个表中获取任何内容,只从上一张照片中的第一个表中获取了所有内容。那么问题出在哪里呢?

这种行为毫无意义,使用时必须显示所有字段*

让我们做一个测试

MySQL 5.6架构设置:

问题1:

:

问题2:

:


您可以随时看到所有字段出现。您用于连接和进行查询的程序可能存在问题。检查两次您正在执行所有句子,不仅是前两行,还检查它们是否是滚动条以查看更多数据。

我已使用给定代码重新启动数据库:

$mysqli->query('
CREATE TABLE `crm`.`roles` 
(
    `id` TINYINT(1) NOT NULL AUTO_INCREMENT,    
    `role_name` VARCHAR(20) NOT NULL,
    `edit` TINYINT(1) NOT NULL DEFAULT 0,   
    PRIMARY KEY (`id`)  
);') or die($mysqli->error);


$mysqli->query('
CREATE TABLE `crm`.`accounts` 
(
    `id` INT NOT NULL AUTO_INCREMENT,
    `role` TINYINT(1) NOT NULL DEFAULT 1,
    `user_name` VARCHAR(20) NOT NULL,
    `password` VARCHAR(100) NOT NULL,
    `email` VARCHAR(100) NOT NULL,
    `first_name` VARCHAR(50) NOT NULL,
     `last_name` VARCHAR(50) NOT NULL,   
    `hash` VARCHAR(32) NOT NULL,
    `active` BOOL NOT NULL DEFAULT 0,   
    PRIMARY KEY (`id`),
    FOREIGN KEY (`role`) REFERENCES roles(`id`)
);') or die($mysqli->error); 

现在,SELECT的每一个组合都运行良好。我不知道问题出在哪里,因为我不记得在表格上做过任何更改。

你能和*分享一下你的尝试和结果吗?您在问题中提到了它,但没有共享。这两个查询是相同的,只是使用了表别名。它们应该产生相同的结果。“我也不明白哪个有效,哪个无效——哪个是第一个,哪个是第二个?@Mureinik抱歉,伙计们,我有点匆忙,犯了一些错误。”。已使用结果和上次查询进行更新。当我进入页面时,我分别说了第一个和第二个。所以你想用一次选择来显示第一个表和第二个表中的所有数据吗?实际上我想选择一些,但我也尝试了全部选择来检测问题。好的,我会尝试重置我的数据库,如果我能发现问题,我会让你们都知道。我认为问题可能是accounts.role和roles.id之间的外键。现在谢谢你。
SELECT *
FROM accounts as a 
JOIN roles as r ON  a.role=r.id
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');
select *
from t1 inner join t2 on t1.i = t2.i
| i | a | i | b |
|---|---|---|---|
| 1 | a | 1 | a |
select *
from t1 x inner join t2 y on x.i = y.i
| i | a | i | b |
|---|---|---|---|
| 1 | a | 1 | a |
$mysqli->query('
CREATE TABLE `crm`.`roles` 
(
    `id` TINYINT(1) NOT NULL AUTO_INCREMENT,    
    `role_name` VARCHAR(20) NOT NULL,
    `edit` TINYINT(1) NOT NULL DEFAULT 0,   
    PRIMARY KEY (`id`)  
);') or die($mysqli->error);


$mysqli->query('
CREATE TABLE `crm`.`accounts` 
(
    `id` INT NOT NULL AUTO_INCREMENT,
    `role` TINYINT(1) NOT NULL DEFAULT 1,
    `user_name` VARCHAR(20) NOT NULL,
    `password` VARCHAR(100) NOT NULL,
    `email` VARCHAR(100) NOT NULL,
    `first_name` VARCHAR(50) NOT NULL,
     `last_name` VARCHAR(50) NOT NULL,   
    `hash` VARCHAR(32) NOT NULL,
    `active` BOOL NOT NULL DEFAULT 0,   
    PRIMARY KEY (`id`),
    FOREIGN KEY (`role`) REFERENCES roles(`id`)
);') or die($mysqli->error);