Как написать SQL для извлечения данных из столбца в другой столбец - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть 2 таблицы tblA и tblB.Теперь я хочу получить имя по op_code.

tblA
op_code    |     date    |    num
------------------------------------------------
 a         |      03/01  |    34
 b         |      04/03  |    5556
 c         |      03/05  |    555

tblB
id    |     op_code    |    Name
------------------------------------------------
 1    |       a        |    Jet
 2    |       b,c      |    Mike
 3    |       d        |    Tom

Поскольку данные op_code в tblB являются комбинированными данными, поэтому я пытаюсь написать sql, как показано ниже.

   select a.*, b.* 
     from tblA a 
LEFT JOIN tblB b on a.op_code in (SUBSTRING_INDEX(b.op_code, ',', 13))

Это нене работаетЕсть какие-нибудь предложения?

1 Ответ

0 голосов
/ 18 апреля 2019

Вы можете использовать FIND_IN_SET() здесь:

SELECT a.*, b.*
FROM tblA a
LEFT JOIN tblB b
    ON FIND_IN_SET(a.op_code, b.op_code) > 0;

Но, поскольку хранение данных CSV в таблицах SQL считается плохой практикой, поскольку это ненормализованные данные, вы должны просматривать только этот временный обходной запрос. Гораздо лучшим планом было бы взять на себя обязательство иметь только одну запись для каждого op_code отношения в таблице B.

Просто для удовольствия, вот еще один способ написать запрос, используя REGEXP:

SELECT a.*, b.*
FROM tblA a
LEFT JOIN tblB b
    ON b.op_code REGEXP CONCAT('[[:<:]]', a.op_code, '[[:>:]]');

enter image description here

Вот демоверсия для второй версии запроса:

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...