gpt4 book ai didi

mysql 显示公司的所有其他结果

转载 作者:行者123 更新时间:2023-11-29 07:29:00 26 4
gpt4 key购买 nike

我有一个问题。这是我的数据库结构

**company**
id | name
---------
1, Test
2, demo

**address**
id | name
---------
1, test1
2, test2
3, bla6

**address_company**
id | address_id | company_id
1, 1, 1
2, 2, 1
3, 3, 2

我的查询是这样的:

SELECT company.name, address.name FROM company 
INNER JOIN address_company on address_company.company_id = company.id
INNER JOIN address on address.id = address_company.address_id

这有效。但我需要过滤结果。

所以当人们点击地址(前端):test1时,只需要显示公司:Test

我可以做到这一点:

WHERE address.name = "test1"

这也有效,但我需要进一步过滤,所以我需要的是

WHERE address.name = "test1" AND address.name = "test2" 

但这不起作用,它不显示结果。我只能过滤 1 个地址,我需要过滤更多地址。

希望大家能够理解我并帮助我。谢谢!

最佳答案

以下策略依赖于唯一键(address_id,company_id)确保该组合级别没有重复

架构

create table company
( id int auto_increment primary key,
name varchar(100) not null
);
insert company(name) values ('Test'),('demo');

create table address
( id int auto_increment primary key,
name varchar(100) not null
);
insert address(name) values ('test1'),('test2'),('bla6');

create table address_company
( id int auto_increment primary key,
address_id int not null,
company_id int not null,
unique key(address_id,company_id) -- no dupes allowed ! I am banking on this below
);
insert address_company(address_id,company_id) values (1,1),(2,1),(3,2);

查询

select company_id,count(*) theCount from address_company 
where address_id in (1,2)
group by company_id having theCount>1;

+------------+----------+
| company_id | theCount |
+------------+----------+
| 1 | 2 |
+------------+----------+

select company_id,count(*) theCount from address_company
where address_id in (select id from address where name in ('test1','test2'))
group by company_id having theCount>1;

+------------+----------+
| company_id | theCount |
+------------+----------+
| 1 | 2 |
+------------+----------+

因此,如果 group by/having 返回的计数大于 1(我实际上是在 name1 和 name2 之后),那么我就知道该行符合条件。当然,该行有 name1 name2。

回到唯一的关键部分:这可以确保我们不会被欺骗,因为一家公司两次拥有相同的地址。这首先没有意义,而且还会扰乱这个策略。

显然,该模式需要一些索引帮助,而 FK 不会让任何人伤心。但这只是一个稻草人。

关于mysql 显示公司的所有其他结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33425813/

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