【问题标题】:SQL If field is '*' then select from another tableSQL If field is '*' then select from another table
【发布时间】:2020-11-10 14:54:08
【问题描述】:

我有一张名为“订单”的表格。我的表中有一个名称为 adressFinder('*', '%', '+') 的 1 个字符的字段。如果有“+”,我想从“客户”表中选择“地址”字段。如果有“%”,我想从“customerTwo”表中选择“adress”,如果有“+”,则从“customerThree”表中选择“adress”。

所有表格都可以通过“customerID”字段连接。

我尝试了类似的方法但不起作用(语法问题):

Select order.orderId, order.customerID,
CASE WHEN order.adressFinder = '*' THEN (SELECT customer.adress FROM customer INNER JOIN order on (customer.customerID = order.customerID)) 
     WHEN order.adressFinder = '%' THEN (SELECT customer.adress FROM customerTwo INNER JOIN order on (customerTwo.customerID = order.customerID)) 
     WHEN order.adressFinder = '+' THEN (SELECT customer.adress FROM customerThree INNER JOIN order on (customerThree.customerID = order.customerID))
END
FROM order
INNER JOIN customer on (order.customerID = customer.customerID)
INNER JOIN customerTwo on (order.customerID = customerTwo.customerID) 
INNER JOIN customerThree on (order.customerID = customerThree.customerID)

有人可以帮我解决我的问题吗?谢谢!

【问题讨论】:

  • 样本数据和期望的结果会有很大帮助。

标签: mysql sql database if-statement


【解决方案1】:

您可以使用 LEFT JOIN 来做到这一点。假设您只想显示一个地址,您可以使用 COALESCE - 它会将第一个非空值显示为地址。

例如:

SELECT
o.orderId AS orderId, 
o.customerID AS customerID,
COALESCE(c.adress, c2.adress, c3.adress) AS Address
FROM order o
LEFT JOIN customer c ON c.customerID = o.customerID AND o.adressFinder = '*'
LEFT JOIN customerTwo c2 ON c2.customerID = o.customerID AND o.adressFinder = '%'
LEFT JOIN customerThree c3 ON c3.customerID = o.customerID AND o.adressFinder = '+'

【讨论】:

  • 这对我帮助很大,但是有没有办法做到这一点,如果有另一个字段包含字符(*、%、+)并且你必须再做一次?
【解决方案2】:

我不明白您为什么要使用子查询。这不是你想要的吗?

SELECT o.orderId, o.customerID,
       COALESCE(c.address, c2.address, c3.address)
FROM order o LEFT JOIN
     customer c
     ON o.customerID = c.customerID AND
        o.adressFinder = '*' LEFT JOIN
     customerTwo c2
     ON o.customerID = c2.customerID AND
        o.adressFinder = '%' LEFT JOIN
     customerThree c3
     ON o.customerID = c3.customerID AND
        o.adressFinder = '+';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-29
    • 2017-07-04
    • 1970-01-01
    • 2011-04-06
    • 2022-12-02
    • 1970-01-01
    • 2011-09-09
    • 2022-01-05
    相关资源
    最近更新 更多