gpt4 book ai didi

MySQL Group_Concat 不在

转载 作者:行者123 更新时间:2023-11-29 06:45:08 25 4
gpt4 key购买 nike

我还没有找到类似的问题和我可以使用的答案,希望我没有忽略另一个问题。

我想构建一个查询,返回值不在 group_concat 中的项目。让我用一个例子来展示:

我有一张练习表:

id  |  ExerciseName
---------------------
1 | Squat
2 | Deadlift
3 | Bench Press
4 | Deadlift Hex Bar

然后我有一个单独的表格,显示了这些设备各自使用的设备:

id  | ExerciseId  |  EquipmentId
---------------------------------
1 | 1 | 1
2 | 1 | 20
3 | 2 | 1
4 | 3 | 47

然后我有一个单独的表格,显示每个设备的名称:

id  | name_en
-------------
1 | Barbell
2 | Squat Rack
3 | Dumbbell

现在,我正在运行一个可以选择练习的查询,并且我想查询设备可供用户使用的位置的练习。假设用户没有 Id = 1 的设备。那么我只想返回练习 3。目前,在我的查询中,我正在获取练习 1 和 3,它这样做是因为练习 1 确实有设备 Id = 1,但它还有另一个不等于设备 Id = 1(因为它是 Id = 20 )。

SELECT
we.id ExerciseId,
we.name_en ExerciseName
GROUP_CONCAT(DISTINCT weeq.name_en ORDER BY weeq.name_en SEPARATOR ', ') Equipment
FROM workouts_exercise we
JOIN workouts_exercise_equipment weeq ON weeq.exercise_id = we.id
JOIN workouts_equipment weq ON weq.id = weeq.equipment_id
WHERE weq.id NOT IN ("1")
GROUP BY we.id

如前所述,结果如下:

ExerciseId  | ExerciseName   | Equipment
------------------------------------------
1 | Squat | 20
3 | Bench Press | 47

实际上,我想要的只是这样:

ExerciseId  | ExerciseName   | Equipment
------------------------------------------
3 | Bench Press | 47

最佳答案

一种方法是使用反连接来过滤掉使用您想要排除的一个或多个设备的练习:

SELECT
we1.ExerciseId,
ex.ExerciseName,
we1.EquipmentId AS Equipment
FROM workouts_equipment we1
LEFT JOIN workouts_equipment we2
ON we1.ExerciseId = we2.ExerciseId AND
we2.EquipmentId IN (1)
INNER JOIN workouts_exercise ex
ON we1.ExerciseId = ex.id
WHERE
we2.ExerciseId IS NULL;

Demo

关于MySQL Group_Concat 不在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49854199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com