我有ID,appId,status,orderId的表ORDERS。
状态可以-OK,ONHOLD,DONE,REJECT等
For this use case i want to filter with status OK and ONHOLD and order if status is "OK" - I want to get allow all orderIds if status is "ONHOLD" - only get ids with whiteList orders. Here the statusList has 2 Strings and whiteListOrders dynamically generated list
public List<Long> getIds(
@Bind("appId") String appId,
@BindIn("statusList") List<String> statusList,
@BindIn("whiteListOrders") List<String> whiteListOrders);
如何在mysql查询中实现这一目标
答案 0 :(得分:0)
下面将是通用查询-
SELECT <req cols>
FROM mytable1
WHERE status='OK'
UNION
SELECT <req cols>
FROM mytable
WHERE status='ONHOLD'
AND id IN
(
SELECT orderids
FROM <whitelistorders>)
如果您可以提供表和列的详细信息,则也可以通过join来完成。
希望这会有所帮助。
答案 1 :(得分:0)
您可以合并查询。这将为您提供所需的数据。
(SELECT ids FROM ORDERS WHERE status='OK' AND ids IN (@whiteListIds))
UNION
(SELECT ids FROM ORDERS WHERE status='ONHOLD' AND ids IN (@whiteListIds))
如前所述,如果没有UNION
,这将是可能的:
#set @whitelist = your whitelist IDS; /* Not sure how you have this setup */
SELECT
*
FROM
user
WHERE
status='OK'
OR (
status='ONHOLD'
AND id IN (@whitelist)
)
希望这会有所帮助
答案 2 :(得分:-1)
提供的答案都不是最佳的,因为它们都使用UNION。完全没有理由这样做,您可以使用AND,OR和括号将WHERE子句中的子句组合在一起,从而轻松添加所需的多个子句。
我也考虑使用and exists(subquery)
而不是使用in (subquery)