Соедините две таблицы, если a.var содержит число

avatar
Keith D Kaiser
7 апреля 2018 в 22:27
30
1
0

Я пытаюсь соединить две таблицы с помощью a.class = b.class, но только если значение в a.class содержит число (abc4dfg). В противном случае мне нужен только вывод ncm.tbla, а не соединение с другой таблицей, возможно ли это?

SELECT a.grid, a.state, a.class,
    IF(a.class REGEXP '[0-9]', b.cnty)
  FROM ncm.tbla a
  LEFT JOIN fcc.tblb b
         ON (a.class LIKE '%ncmo%'
        AND a.class = b.class)
Источник
Raymond Nijland
7 апреля 2018 в 22:49
0

«В противном случае мне нужен только вывод ncm.tbla, а не соединение с другой таблицей, возможно ли это?» Нет, вы не можете написать условное соединение таким образом в SQL.

Ответы (1)

avatar
user2780362
7 апреля 2018 в 22:37
1

Если я правильно понимаю ваш вопрос, я думаю, что добавление чего-то вроде этого в ваше предложение ON будет работать:

SELECT a.grid, a.state, a.class, b.cnty
FROM ncm.tbla a
LEFT JOIN fcc.tblb b 
    ON (a.class = b.class AND a.class LIKE '%[0-9]%')
Raymond Nijland
7 апреля 2018 в 22:46
0

Не сработает.. %[0-9]% будет буквально искать шаблон [0-9] в столбце a.class.

Keith D Kaiser
7 апреля 2018 в 23:04
0

Я думаю, это близко. Проблема в том, что фильтр; AND a.class LIKE '%ncmo%' не применяется, и возвращаются все значения в ncm.tbla.

user2780362
8 апреля 2018 в 22:52
0

Я почти уверен, что [0-9] - это путь, он не обрабатывается как регулярное выражение, он ищет любой символ, затем символ в диапазоне от 0 до 9, а затем любые символы после. Я немного смущен тем, какие именно утверждения вы хотите фильтровать. Я также думаю, что вы потенциально можете переместить 1 или 2 из предложения ON в предложение where.

Keith D Kaiser
9 апреля 2018 в 18:26
0

@user2780362 user2780362 Это именно то, что я использовал REGEXP '[0-9]', а не НРАВИТСЯ. Спасибо.