SQL Присоединиться к столбцу, КАК другой столбец [дубликата]

15

Возможный дубликат:
mysql присоединить запрос, используя как?

Я хочу сделать соединение, где один столбец содержит строку из другого столбца таблицы:

SELECT
a.first_name,
b.age
FROM names a
JOIN ages b
ON b.full_name LIKE '%a.first_name%'

Возможно ли это? Я использую MySQL. Конечно, вышеуказанный запрос не будет работать, так как LIKE '% a.first_name%' просто ищет строку a.first_name, а не фактическое значение столбца.

  • 0
    Если у вас есть% в начале строки, он не сможет использовать любые индексы, которые у вас есть в этом столбце b.full_name. Просто сообщаю вам, что ваша производительность будет ужасной, если у вас здесь будет большая база данных.
  • 0
    Вы получите то, что просите, хотя. так что если имя зовут Джо, вы получите Жозефина, Жозилин, Джобоб, Джоди, Джозеф и т. д.
Теги:
join
sql-like

2 ответа

24
Лучший ответ

Вам нужно только конкатенировать строки, вы также можете выполнить поиск и заменить.

SELECT
    a.first_name,
    b.age
FROM names a
JOIN ages b
ON b.full_name LIKE '%' + a.first_name + '%'
  • 7
    Работает лучше для меня, используя ON b.full_name LIKE CONCAT('%', a.first_name, '%')
  • 0
    Это решение для SQL Server, а не MYSQL
13

Вы можете использовать CONCAT:

SELECT
  a.first_name,
  b.age
FROM
  names a JOIN ages b
    ON b.full_name LIKE CONCAT('%', a.first_name, '%')

а также LOCATE, который возвращает позицию первого вхождения a.first_name в b.full_name:

SELECT
  a.first_name,
  b.age
FROM
  names a JOIN ages b
  ON LOCATE(a.first_name, b.full_name)

если есть совпадение, соединение будет успешным.

  • 2
    LOCATE () интересно, будет ли это просто возвращать ненулевое значение, когда строка существует в b.full_name, и возвращать false в противном случае?
  • 1
    @DonnyP locate вернет 0, если совпадения нет, или позиция первого вхождения имени. 0 считается эквивалентным False, если значение> = 1, оно считается True

Ещё вопросы

Сообщество Overcoder
Наверх
Меню