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

mysql显示公司的所有其他结果,mysql,join,inner-join,Mysql,Join,Inner Join,我有个问题。这是我的数据库结构 **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 compan

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

**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
这很有效。但我需要过滤结果

因此,当人们单击address(frontend):test1时,它只需要显示company:Test

我可以这样做:

WHERE address.name = "test1"
这也可以,但我需要进一步过滤,所以我需要的是

WHERE address.name = "test1" AND address.name = "test2" 
但这不起作用,不能显示结果。我只能过滤1个地址,我需要过滤更多地址

希望你们能理解我,能帮助我。
谢谢

使用或代替and,或使用in()结构:

WHERE address.name = 'test1' OR address.name = 'test2'


WHERE address.name IN('test1', 'test2' )
注意:我希望下面的连接条件在问题中输入错误:

 INNER JOIN address on address.id = address_company.id

下面的策略依赖于
唯一键(address\u id,company\u id)
确保该组合级别没有重复项

模式 疑问 因此,如果groupby/having返回的计数大于1,我在name1和name2后面,那么我知道该行符合条件。那一行当然有name1和name2

回到独特的关键部分:这保证了我们不会在拥有两个相同地址的公司时受骗。这首先是没有意义的,而且这也会打乱这一战略


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

连接不正确,但我更改了:)这只是一个示例。但是我想对结果进行筛选,所以我想显示address.name='test1'的所有公司,然后我想筛选更多,所以它将显示address.name='test1'和'test2'的所有公司,您的代码将显示address.name='test1'或'test2'的所有公司。这不是我想要的,我想对地址进行过滤,这样它可以显示地址为“test1”和“test2”的公司。顺便说一句,这是一些例子,不是我真正的代码,但谢谢你的帮助。谢谢!它起作用了。因为我也使用全文搜索,所以我不能使用FK:(
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 |
+------------+----------+