У меня есть следующий оператор MySQL:
SELECT registration FROM
(SELECT registration FROM installs
WHERE customer_id = :id1
UNION SELECT registration FROM services
WHERE customer_id = :id2
UNION SELECT registration FROM deinstalls
WHERE customer_id = :id3)
AS vehicles
Мне нужно выбрать уникальные «регистрации» из нескольких таблиц, что это утверждение делает почти идеально.
Выбирает AB01 CDE
а также aB01 cdE
как один предмет, однако AB01CDE
/ aB01cdE
выбраны в качестве другого элемента.
Я пытался использовать REPLACE
вокруг первого registration
убрать пробелы при выборе уникальных предметов.
REPLACE()
должно сработать. Ты сделал это?
SELECT DISTINCT REPLACE(registration, ' ', '') as Registration
FROM (SELECT registration
FROM installs
WHERE customer_id = :id1
UNION ALL
SELECT registration
FROM services
WHERE customer_id = :id2
SELECT registration
FROM deinstalls
WHERE customer_id = :id3
) v;
Также возможно, что разделяющие символы не являются пробелами, в этом случае это не будет работать.
Я думаю, что это может быть то, что вы ищете?
SELECT registration FROM customers WHERE customer_id in
(SELECT registration AS installs_registration FROM installs WHERE customers.customer_id = installs.id,
SELECT registration AS services_registration FROM services WHERE customers.customer_id = services.id,
SELECT registration AS deinstalls_registration FROM deinstalls WHERE customers.customer_id = deinstalls.id)
У вас есть два варианта. Первое, чтобы добавить DISTINCT
к первому REPLACE
на registration
:
SELECT DISTINCT REPLACE(registration, ' ', '') FROM (
... your UNION queries
)
AS vehicles
Второй заключается в использовании REPLACE
в каждом из ваших подзапросов; UNION
гарантирует, что вы получите четкие результаты:
SELECT registration FROM (
SELECT REPLACE(registration, ' ', '') AS registration
FROM installs
WHERE customer_id = :id1
UNION SELECT REPLACE(registration, ' ', '')
FROM services
WHERE customer_id = :id2
UNION SELECT REPLACE(registration, ' ', '')
FROM deinstalls
WHERE customer_id = :id3
)
AS vehicles