2013-03-25 2 views
1

У меня есть таблицы, имеющей столбцы идентификатор и имяКак удалить повторяющиеся строки из присоединиться запроса в MySQL

в моей таблице 3 записей настоящих

id  name 
1  Chinmoy 
2  Amit 
3  Bhagi 

Я хочу привести

name1  name2 
Amit  Bhagi 
Amit  Chinmoy 
Bhagi  chinmoy 

Я пробовал и преуспел до этого

name1 name2 
Amit  Bhagi 
Amit  Chinmoy 
Bhagi Amit 
Bhagi Chinmoy 
Chinmoy Amit 
Chinmoy Bhagi 

, используя этот запрос

select tbl1.name,tbl2.name from test tbl1 
join test tbl1 on tbl1.name != tbl2.name 
order by tbl1.name,tbl2.name; 

Теперь я не понял, как это сделать.

Я должен устранить запись, которая уже присутствует в обратном порядке.

Пожалуйста, помогите

Заранее спасибо

ответ

4

В принципе, вы можете фильтровать результат от произведения двух таблиц с помощью a.Name < b.Name

SELECT a.Name Name1, b.Name Name2 
FROM TableName a, TableName b 
WHERE a.Name < b.Name 
ORDER BY Name1, Name2 

ВЫХОДА

╔═══════╦═════════╗ 
║ NAME1 ║ NAME2 ║ 
╠═══════╬═════════╣ 
║ Amit ║ Bhagi ║ 
║ Amit ║ Chinmoy ║ 
║ Bhagi ║ Chinmoy ║ 
╚═══════╩═════════╝ 
+0

да его работающий штраф. не могли бы вы объяснить мне вопрос, как работает a.Name user1926138

+0

рад слышать это .. –

2

Попробуйте это:

select tbl1.name as n1, tbl2.name as n2 from test tbl1 
join test tbl2 
on tbl1.name < tbl2.name 
order by tbl1.name, tbl2.name; 

Объяснение:

Вы можете добавить условие tbl1.name < tbl2.name для устранения повторяющихся значений. Таким образом вам не понадобится условие соединения, которое у вас уже есть (tbl1.name != tbl2.name). Потому что когда < b, a определенно не равен b, а также сортирует ваши имена так, что если Amit < Bhagi истинно, противоположное неверно, и вы также не получите Bhagi-Amit.

+0

@tombom хорошая точка! Я обновлю – jurgenreza

+0

@ user1926138 С вашим примером, приведенным в этом ответе, будут заполнены требования. +1 – fancyPants

+0

@ user1926138 он даст вам точный результат. попробуй. – jurgenreza

Смежные вопросы