SQL, если поле равно ‘*’, затем выберите из другой таблицы

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