sql - 消除多个条件并减少到一个(没有 OR 语句)
问题描述
SELECT "listings".*, trucks.*, cars.*, trucks.id as truck_id, cars.id as cars_id, listings.id as listing_id
FROM "listings"
LEFT OUTER JOIN "trucks" ON "trucks"."id" = "listings"."listable_id" AND "listings"."listable_type" = 'Truck'
LEFT OUTER JOIN "cars" ON "cars"."id" = "listings"."listable_id" AND "listings"."listable_type" = 'Car'
WHERE (cars.user_id = 119 or trucks.user_id = 119) LIMIT $1 [["LIMIT", 11]]
有没有办法修改上面的sql做同样的事情,但只是调用user_id = 119
而不是使用or
子句?
我希望能够做类似的事情......
SELECT "listings".*, trucks.*, cars.*, trucks.id as truck_id, cars.id as cars_id, listings.id as listing_id
FROM "listings"
LEFT OUTER JOIN "trucks" ON "trucks"."id" = "listings"."listable_id" AND "listings"."listable_type" = 'Truck'
LEFT OUTER JOIN "cars" ON "cars"."id" = "listings"."listable_id" AND "listings"."listable_type" = 'Car'
WHERE (user_id_alias = 119) LIMIT $1 [["LIMIT", 11]]
或类似的东西
WHERE (alias.user_id = 119) LIMIT $1 [["LIMIT", 11]]
简化代码的目的是我编写了一个只关心 user_id 的搜索查询对象,并且由于卡车和汽车是互斥的,因为你永远不可能同时拥有卡车和汽车的列表,我需要获取所有列表特定的用户。
解决方案
您可以加入"listings"
和并集"cars"
和"trucks"
表。
SELECT "listings".*
FROM "listings"
JOIN (
SELECT 'Car' as "vtype", "id", "user_id"
FROM "cars"
UNION ALL
SELECT 'Truck' as "vtype", "id", "user_id"
FROM "trucks"
) vehs ON vehs."id" = "listings"."listable_id" AND "listings"."listable_type" = vehs."vtype" AND vehs."user_id" = 119
推荐阅读
- python - Pandas - 用某种模式替换值
- python - 如何在pygame中有效地渲染大表面
- php - 根据php中的值插入数组中
- python - 有没有办法改变 Python 在符号方程中使用 ** 输出指数的方式?
- flutter - 如何在小部件中设置条件?
- python-3.x - Python EXE 请求 sudo 访问
- python - 可怕的缩进问题(未缩进不匹配......)
- arrays - 在 MongoDB 中使用 $rename 重命名嵌套字段名称
- java - java.lang.RuntimeException:执行doInBackground()时出错,由NullPointerException引起
- mysql - 按相同的值对列进行分组并更新