Как установить приоритет или условие в mysql
У меня есть структура таблицы примерно такая
+---+----------+-----------+--------------+ | id| customer | Address | Address_type | +---+----------+-----------+--------------+ |1 | 1 | Address 1 | 2 | |2 | 2 | Address 2 | 2 | |3 | 1 | Address 3 | 1 | +---+----------+-----------+--------------+
В базе данных есть два типа Address_types. Я должен выбрать адрес, основываясь на следующих условиях
- Если адрес для костюмера Address_type = 1 присутствует, то отобразите этот адрес.
- Если Address_type = 1 отсутствует, а Address_type = 2 присутствует, то отобразите адрес Address_type = 2 для этого клиента.
- Если оба присутствуют для этого клиента, то отображается только адрес, где Address_type = 1
Я пробовал это по условию или, но он отображает запись, которая является первой в базе данных, так что есть способ в запросе mysql достичь этого только с одним запросом? то есть что-то вроде предоставления приоритета в или условие для извлечения только Address_type = 1 запись, когда оба Address_types(1 и 2) присутствуют в базе данных?
6 ответов:
Другой вариант: получить минимум
Address_Type
для каждого клиента, а затем присоединиться к нему:SELECT id, customer, Address, Address_Type FROM custs INNER JOIN ( SELECT customer, MIN(Address_Type) AS MinType FROM custs GROUP BY customer ) AddType ON custs.Address_Type = AddType.MinType
Вы можете использовать
SELECT yt1.* FROM your_table yt1 LEFT JOIN your_table yt2 ON ( yt2.customer = yt1.customer AND yt2.address_type < yt1.address_type ) WHERE yt2.id IS NULL
Выходы:
| ID | CUSTOMER | ADDRESS | ADDRESS_TYPE | -----|----------|-----------|--------------| | 1 | 1 | Address 1 | 2 | | 2 | 3 | Address 2 | 2 |
SQLFIDDLE
SELECT customer, COALESCE( MAX(CASE WHEN Address_type=1 THEN Address END), MAX(CASE WHEN Address_type=2 THEN Address END) ) FROM tableName GROUP BY customer
Пожалуйста, смотрите fiddleздесь .
SELECT id, customer, IF(address_type=1, address, IF(address_type=2, address, null)) as address FROM customer_table GROUP BY customer;
Что это делает, так это то, что тип адреса один, он использует этот адрес, если два, то адрес 2, иначе ничего.