sql - 基于特定表值的 SQL 连接选择
问题描述
目标:选择所有项目,users_allergy =0
但过滤掉项目时allergy=1
User_peanut_allergy = 0
表示用户没有花生过敏。
User_peanut_allergy = 1
表示用户有这种过敏症。不要展示坚果
用户表和营养表中的过敏项设置为 1。如果用户没有过敏,则表值为 0。
如果用户没有过敏但在过敏时失败(设置为1
),则此方法有效。它失败了,因为>=0
。我需要区分匹配greater than 0
但不是users allergy is a 1
.
SELECT *
FROM [dbo].[Nutrition]
INNER JOIN Users ON Nutrition.contains_gluten >= Users.gluten_allergy
AND Nutrition.contains_nuts >= Users.peanut_allergy
AND Nutrition.contains_fish >= Users.fish_allergy
AND Nutrition.contains_soy >= Users.soy_allergy
AND Nutrition.contains_dairy >= Users.dairy_allergy
WHERE Users.username = 'Kyle';
如何放置 if 语句来确定用户是否没有过敏,然后显示所有项目?
IF (Users.peanut_allergy == 0)
SELECT everything including allergy items
ELSE
JOIN
WHERE contains_nuts = 0
示例数据:https0 for no allergy
://pastebin.com/2knYTcHk 使用和
测试用户表1 for allergy
解决方案
如果你想要 1/0 组合,你可以使用乘法:
SELECT *
FROM [dbo].[Nutrition] JOIN
Users
ON Nutrition.contains_gluten * (1 - Users.gluten_allergy) = 1 OR
Nutrition.contains_nuts * (1 - Users.peanut_allergy) = 1 OR
Nutrition.contains_fish * (1 - Users.fish_allergy) = 1 OR
Nutrition.contains_soy * (1 - Users.soy_allergy) = 1 OR
Nutrition.contains_dairy * (1 - Users.dairy_allergy) = 1
WHERE Users.username = 'Kyle';
我也认为这>
会奏效。
推荐阅读
- wordpress - 如何在woocomerce中禁用外部产品上的添加到购物车按钮功能
- linux - 通过选择具有更大值的行来折叠重复的行
- java - 从 ZonedTimeDate 到 java.util.Date 的字符串,没有月份和日期的名称
- html - 删除/添加属性会导致全部删除
在 - python - 将字典列表转换为 DataFrame
- r - 数据框修改
- c++ - 有人可以解释这段代码的最后一部分吗?
- url - 运行 npm start 时如何从 URL 中删除端口号?
- spring-boot - Spring boor - r2dbc - 使用 AWS Aurora
- javascript - How can i improve this filter ? this is working but i think that isnt the right way