2015-08-13 5 views
1

Я хочу выбрать все строки из моей таблицы, где значение одного столбца начинается со значения другого столбца.выберите, где одна часть столбца другого

Table 
column_a   column_b 

abc    abcdef 
pqr    rstrv 
xyz    xyzabc 
uvw    abcdef 

Я хочу, чтобы получить

pqr    rstrv 
uvw    abcdef 

Я использую запрос

SELECT * FROM table_name WHERE column_b NOT LIKE column_a + '%' 

Я получаю ошибку

1064 - У вас ошибка в ваш синтаксис SQL; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом с «+„%“LIMIT 0, 30» в строке 1

Я попытался решения этих вопросов Compare Columns Where One is Similar to Part of Another

Oracle: LIKE where any part of one string matches amy part of another string

SQL search column where one item in column is substring of another item

SQL search column where one item in column is substring of another item Update. Но все же результат ошибки или неправильных результатов

Моя версия mysql - это серверная версия: 5.5.44-0ubuntu0.14.04.1 (Ubuntu). Я использую phpMyAdmin для выполнения запросов.

+0

Зачем вам эти две строки, а не 'abc' +' xyz'? Ваш запрос предполагает, что вы хотите иметь противоположное, все строки, где второй столбец не начинается с первого столбца. –

+0

@TimSchmelter, потому что строки с значениями column_a abc, xyz, column_b начинаются с того же значения, то есть значение column_a –

ответ

2

У вас есть правильная идея, но MySQL не поддерживает оператор + для конкатенации строк, только для математического добавления. Вместо этого, просто использовать concat функцию:

SELECT * FROM table_name WHERE column_b NOT LIKE CONCAT(column_a, '%') 
1

В MySQL, вы должны использовать CONCAT() вместо +:

select * 
from TableName 
where column_b not like CONCAT(column_a,'%') 

В SQL Server:

select * 
from TableName 
where column_b not like column_a+'%' 
+0

Это лучшее объяснение моей проблемы. Простите, я не мог принять этот ответ. Внимательно оцените время, которое вы приняли. –

+0

Почему некоторые dbms-продукты не совместимы с ANSI SQL, когда речь идет о конкатенации? Довольно просто добавить ANSI SQL || конкатенация к грамматике SQL ... – jarlh

+0

Это лучший ответ и был дан до принятого ответа. Интересно, почему OP не согласился с этим. – SouravA

1

Попробуйте

SELECT * FROM table_name WHERE column_b NOT LIKE CONCAT(column_a,'%') 

или

SELECT * FROM table_name WHERE column_b LIKE CONCAT('%', column_a, '%') 
Смежные вопросы