SQL如果字段为'*',则从另一个表中选择

时间:2020-11-10 14:54:08

标签: mysql sql database if-statement

我有一个名为“ order”的表。我的表格中有一个包含1个字符的字段,名称为adressFinder('*','%','+')。如果有“ +”,我想从表“客户”中选择字段“地址”。如果有'%',我想从表“ 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)

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

2 个答案:

答案 0 :(得分:2)

您可以使用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 = '+'

答案 1 :(得分:1)

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

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 = '+';