我目前正在努力执行一些连接,希望有人能对此有所启发。 我有三个表:A、B、C
- 表C列出了个人姓名
表A列出了他们喜欢吃的食物
表 B 是显示一个人喜欢 C 中 A 中的哪些食物的链接(我们的 系统是在没有外键的情况下构建的!我知道,这很痛苦!)
我想写的是一个查询,它将返回表 C 中的值列表,该表显示不喜欢特定食物的个人......比如 PFC
我有以下内容:
select * from table_c c
inner join table_b b
on c.name = b.bValue
inner join table_a a
on b.aValue = a.number
where a.value not in('PFC')
我假设连接有效,但由于表 A 有多个值,因此将返回额外的两行。如果其中一个联接显示我不想看到的食物,是否可以不向该客户显示?
Table A
|---------------------|------------------|
| Number | Value |
|---------------------|------------------|
| 1 | McDs |
|---------------------|------------------|
| 1 | KFC |
|---------------------|------------------|
| 1 | PFC |
|---------------------|------------------|
Table B
|---------------------|------------------|
| bValue | aValue |
|---------------------|------------------|
| John | 1 |
|---------------------|------------------|
Table C
|---------------------|
| Name |
|---------------------|
| John |
|---------------------|
如果有所不同,我也在使用 SQL Server 2013!
最佳答案
不存在:
select * from table_c c
where not exists (
select 1 from table_b b inner join table_a a
on b.aValue = a.number
where b.bValue = c.name and a.value = 'PFC'
)
关于sql - 尝试编写一个内部连接来过滤掉一些条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57672437/