sql - 尝试编写一个内部连接来过滤掉一些条件

标签 sql sql-server inner-join

我目前正在努力执行一些连接,希望有人能对此有所启发。 我有三个表: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/

相关文章:

mysql - 将 MySQL 查询从嵌套选择转换为内部连接

sql - 根据其他查询的结果运行 Select 查询

mysql - 如何使用链接的 MySql 服务器更新 SQL 服务器中的行

c# - 动态 T-SQL 的 .NET 错误

sql-server-2008 - 两个表之间的 SQL 内连接

php - mysql从具有不同键的同一列进行多个连接

sql - 具有多个连接到 PostgreSQL 中主表的 UPDATE 语句

MySQL:从左连接中仅选择一行,结果为多行

sql - T-SQL XML 从节点问题中获取值?

sql-server - 在 SQL Server 中,我应该为表或存储过程创建同义词吗?