Mysql加入表演怪异

问题描述 投票:-1回答:2

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

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.roleroles.id与外键相关联。我尝试在第三个查询中使用*选择所有内容,但它甚至没有得到任何东西,从第二个表只得到第一个表中的所有内容(如在上一张照片中)。那可能是什么问题呢?

mysql sql database
2个回答
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行,还检查它们是否是滚动条以查看更多数据。


0
投票

我用给定的代码重新启动了数据库:

$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的每个组合现在都正常工作。我不知道问题是什么,因为我不记得对表格进行任何更改。

© www.soinside.com 2019 - 2024. All rights reserved.