【发布时间】:2021-07-02 13:05:07
【问题描述】:
I've used except keyword to get the desired output
现在,我的情况是有两个表:
- 所有与用户相关的数据都可用(user_id、电子邮件、联系人...)User_id 对我们很重要。
- User_id 和特定用户观看的电影名称(每个用户可以有多个记录) 基本上,当任何用户观看可用电影时都会创建此表。
我没有可用电影的列表,所以让我们假设所有电影都已被表 2 中的某个或其他用户覆盖。使用不同的关键字将给出所有可用的电影。
我需要获取一个查询,该查询提供用户 ID 和特定用户未看过的电影等输出。有没有办法不使用在 SQL 上使用“PLSQL”、“except”、“anti join”或“exists”关键字来获取输出
SELECT DISTINCT
"tabl1"."type",
"tabl2"."user_id"
FROM
"tabl2"
RIGHT JOIN
"tabl1" ON "tabl1"."userid" = "tabl2"."user_id"
WHERE
"tabl1"."type" NOT IN (SELECT DISTINCT "type"
FROM "tabl1"
LEFT JOIN "tabl2" ON "tabl1"."userid" = "tabl2"."user_id"
WHERE "tabl2"."user_id" IN (SELECT DISTINCT "user_id"
FROM "tabl2"))
我尝试过使用 join 操作,但它没有给出任何结果,最终只有 NULL。
我不知道如何获得所需的输出。
Is there a way to get a similar output like this without using the functions described above.
【问题讨论】:
-
我可以建议举一个例子,它的名称与手头的问题有关,例如“电影”、“用户”、“电影观看”等...否则人们会误解问题并您提供的示例 SQL
-
我不明白你为什么拒绝某些方法。好的 PL/SQL 是一种编程语言,您希望它在 SQL 中完成。反连接是在 DBMS 上使用的一种技巧,其优化器较弱,
NOT EXISTS和NOT IN存在问题。你不想混淆它并最终得到一个可读性较差的查询,好吧。但是EXCEPT(或Oracle 中的MINUS)和NOT EXISTS是合适的方法。为什么解雇他们? -
@Thorsten Kettner 我需要在 Zoho 分析上使用这个查询,它不支持任何这些功能
-
@tony stark:ConnorMcDonald 指的是您的 tab1.type 等示例与您的解释没有太大关系。我们希望查询包含用户表、movies_watched 表、movie、movie_title、movie_id 等列。建议您更新您的请求并将 SQL 更改为与解释明确相关的内容。
-
@Thorsten Kettner 感谢您的指出,我添加了一些图片作为参考。