gpt4 book ai didi

sql - 两个连接改变案例大小

转载 作者:行者123 更新时间:2023-12-03 18:41:59 25 4
gpt4 key购买 nike

我的问题是为什么 SQLite 中的双连接会改变结果的大小写。
请看 fiddle :
http://sqlfiddle.com/#!7/88671/3

正如您所看到的,当我查询“从用户中选择 *”时,我的大小名称为 A123456,但是当我进行双重连接时,我只有较小的大小名称 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'

关于sql - 两个连接改变案例大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56871288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com