2016-06-15 3 views
1

У меня есть таблица, как этот ..2 MySQL запросов сразу

[id][Col1][Col2][id_duplicated] 
10 abc1 defg NULL 
12 text text NULL 
50 abc2 text NULL 
90 NULL NULL 10  
500 NULL NULL 10 
620 NULL NULL 50 
700 text text NULL 

Id_duplicated это значение, знаки, который является копией из строки «ид» на том же столе .. если я выбрать идентификатор 620 будет отображать все значения из идентификатора 50

проблема:

select id,col1 from table where col1 is like '%abc%' 

только покажет строке, идентификатор = 10 и ID = 50, но мне нужно отобразить, если есть какие-либо копии этих идентификаторов

я себе представить, что мне нужно подзапрос, сначала найти, есть ли «% ABC%», а затем второй один, чтобы проверить, есть ли копия на id_duplicated равно 10 и 50 и т.д. и т.п ....

Итак, в заключение я нужен один запрос, отобразить этот результат

[id][Col1][Col2][id_duplicated] 
10 abc1 defg NULL 
50 abc2 text NULL 
90 NULL NULL 10  
500 NULL NULL 10 
620 NULL NULL 50 

к сожалению мой английский

+0

Хотя там, наверное, случай использования я здесь отсутствует, но почему хранить дубликаты на всех? Если вы делаете это, пытаясь сохранить какое-то пространство, сохраняя нули вместо значений, все, что вы сделали, это сложность (и время) выгрузки на ваши запросы. Я бы подумал о том, чтобы реорганизовать ваши данные и принять некоторые жесткие решения о том, почему вы так храните вещи. Один из приведенных ниже ответов может действительно сработать, поместить ключевое слово EXPLAIN infront в запрос и посмотреть, как беспорядочный MySQL идет о получении ваших результатов. –

+0

Хорошо .. представьте себе, что у вас есть видео в vhs .. вы создаете новую запись .. ej. id = 10, то вы делаете копию id = 90 (dvd), а затем еще одну копию из mp4 (id = 500), которая содержит то же описание, что и оригинальное. Одна и та же программа, то же самое ... вместо того, чтобы иметь много копий один и тот же носитель, я просто держу один .. другие просто связаны с основным носителем, и вы можете отслеживать, что было первым носителем или форматом .., чтобы привести пример. – Musikdoktor

+0

Честно говоря, хранение намного дешевле, чем время вычисления, но как как вы думали, хотя я играю. –

ответ

2

Если вы хотите дополнительные строки, которые вы можете использовать uni на и выберите ищет идентификатор результата в id_duplicated:

http://sqlfiddle.com/#!9/ad817/8

select id,col1, col2, id_duplicated 
    from table 
    where col1 like '%abc%' 
UNION 
select id, col1, col2, id_duplicated 
    FROM table 
    WHERE id_duplicated IN (select id from table where col1 like '%abc%') 
Смежные вопросы