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 |
+------------+----------+