我有一个名为“ 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)
有人可以帮助我解决我的问题吗?谢谢!
答案 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 = '+';