#mysql #sql #database #if-statement
#mysql #sql #База данных #if-оператор
Вопрос:
У меня есть таблица с именем «порядок». Есть поле с 1 символом с именем adressFinder(‘*’, ‘%’, ‘ ‘) в моем столе. Если есть ‘ ‘, я хочу выбрать поле «адрес» из таблицы «клиент». Если есть ‘%’, я хочу выбрать «адрес» из таблицы «customerTwo», а если есть ‘ ‘, затем выберите «адрес» из таблицы «customerThree».
Все таблицы могут быть объединены с помощью поля «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)
Может кто-нибудь помочь мне с моей проблемой? Спасибо!
Комментарии:
1. Образцы данных и желаемые результаты были бы большой помощью.
Ответ №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 = ' '
Комментарии:
1. Это мне очень помогло, но есть ли способ сделать это, если есть другое поле с символами (*,%, ), и вам нужно сделать это снова?
Ответ №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 = ' ';