两个加入更改案例大小

  • 本文关键字:案例 两个 sql sqlite
  • 更新时间 :
  • 英文 :


我的问题是为什么在sqlite中double Cons在结果中更改案例大小。请用小提琴看:http://sqlfiddle.com/#!7/88671/3

当我查询"从用户中选择 *"时,我有上层名称a123456,但是当我double加入时,我只有较低尺寸的名称a123456。

有人可以解释为什么吗?

模式下面:

CREATE TABLE user (id integer primary key, n_login varchar(64), name varchar(128), CONSTRAINT a UNIQUE (n_login, name) ON CONFLICT IGNORE);
CREATE TABLE role (id integer primary key, name text unique, description text);
CREATE TABLE user_to_role (user_id integer REFERENCES user(id), role_id integer REFERENCES role(id), PRIMARY KEY (user_id, role_id));
CREATE TABLE role_to_database (id integer, role_id integer REFERENCES role(id), database_id integer REFERENCES databases(id), PRIMARY KEY (role_id, database_id));
insert into user (n_login, name) values ("a123456", "A123456");
insert into user (n_login, name) values ("a123456", "a123456");
insert into user (n_login, name) values ("a000000", "A000000");
insert into user_to_role (user_id, role_id) values (2, 1);
insert into user_to_role (user_id, role_id) values (2, 2);
insert into user_to_role (user_id, role_id) values (3, 3);
insert into role_to_database (role_id, database_id) values (1, 3);
insert into role_to_database (role_id, database_id) values (2, 8);
insert into role_to_database (role_id, database_id) values (3, 1);

使用此查询,我有A123456:

select * from user;

使用此查询,我也有A123456:

select * from role_to_database inner join user_to_role ON role_to_database.role_id = user_to_role.role_id inner join user;

但是使用此查询,我只有A123456:

select * from role_to_database inner join user_to_role ON role_to_database.role_id = user_to_role.role_id inner join user ON user.id = user_to_role.user_id;

查询准确返回插入的数据:

insert into user_to_role (user_id, role_id) values (2, 1);
insert into user_to_role (user_id, role_id) values (2, 2);
insert into user_to_role (user_id, role_id) values (3, 3);

因为user_id=1没有任何角色。

你是说

insert into user_to_role (user_id, role_id) values (1, 1); -- 1
insert into user_to_role (user_id, role_id) values (2, 2);
insert into user_to_role (user_id, role_id) values (3, 3);

?然后您也会得到'A123456'

它是一个随机过程,而无需使用order by。因此,要获取数据以使您必须在查询中使用order by

select * from user order by name

最新更新