MySQL: как использовать CASE или IF для сопоставления длины любого столбца, который короче? - PullRequest
0 голосов
/ 05 мая 2020

Я хочу сопоставить столбцы имен, но некоторые из них содержат псевдонимы для имен, поэтому я хочу сделать что-то, где я использую substring_index, чтобы найти имена и ту таблицу, которая имеет более короткое имя (например, Зак против Захари) Я подбираю длину более короткого имени. После этого я сравниваю последние четыре буквы их фамилии, которые я не включил ниже. Прямо сейчас это дает мне ошибку около char_length.

SELECT a.name, b.name
FROM a, b
WHERE IF (
    a.name < b.name)
    THEN 
    a.name = SUBSTRING(b.name, 1, char_length(a.name))
ELIF (
    b.name < a.name)
THEN
    b.name = SUBSTRING(a.name, 1, CHAR_LENGTH(b.name))

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Переключитесь на современный, явный JOIN синтаксис.

Используйте LIKE дважды, чтобы найти a-имена, начинающиеся с b-имен, или b-имена, начинающиеся с a-имен.

SELECT a.name, b.name
FROM a
JOIN b
  ON a.name like concat(b.name, '%') or b.name like concat(a.name, '%')
0 голосов
/ 05 мая 2020
SELECT CASE WHEN
   CHAR_LENGTH(a.name) < CHAR_LENGTH(b.name)
THEN
  SUBSTR(b.name, 1, CHAR_LENGTH(a.name))
ELSE
  SUBSTR(a.name, 1, CHAR_LENGTH(b.name))
END
FROM a, b
...