Antonchik
@Antonchik
Программирую на HTML

Как написать запрос?

Здравствуйте, помогите пожалуйста написать запрос, суть такова есть табличка в которой есть два поля назовем их col1 и col2 мне нужно получить одну запись в которой col1 = 'text' и чтобы была такая же запись но с противоположными значениями то есть col1 = col2 и col2 = col1

Нужно чтобы получилось вот так
| id | col1 | col2 |
| 1 | text1 | text2|
| 2 | text2 | text1|
| 3 | text3 | text4|
| 3 | text5 | text6|

select * ... where col1 = col2(из другой записи) and col2 = col1(из другой записи) and col1 = 'text1'
Должно вывести
| id | col1 | col2 |
| 1 | text1 | text2|
Потому что: у записи с id 1 col1 = text1 и у записи с id 2 col2 = text1 так же с id1 col2 и id2 col1
  • Вопрос задан
  • 270 просмотров
Решения вопроса 2
Sivkoff
@Sivkoff
Web Developer
Не совсем понятен вопрос, но если я правильно понял, то что-то вроде этого вам нужно:
SELECT * FROM tbl t1 
WHERE t1.col1 = 'text1' 
  AND EXISTS(SELECT 'x' FROM tbl t2 WHERE t2.col2 = t1.col1)
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Это похоже на какие-то странные отношения в дереве, типа родитель/потомок.
По моему, тут требуется каким-то образом нормализовать базу, чувствую, что там что-то не так.
Перефразирую немного ответ Vitaly Sivkov:
SELECT t1.* FROM tbl t1 
WHERE t1.col1 = 'text1' 
  AND EXISTS(SELECT 'x' FROM tbl t2 WHERE (t2.col2 = t1.col1 or t2.col1 = t1.col2) and t2.id <> t1.id)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
EreminD
@EreminD
Кое-что умею
вот до
в которой col1 = 'text'
все понятно.
Потом вообще ниче не ясно: что значит "противоположное значение"? Какое значение противоположно 'text'? Где тут противоположность
col1 = col2 и col2 = col1
?

Ну давайте так попробуем:
SELECT * 
FROM myTaBLE 
WHERE col1='text'
AND col1=col2
Ответ написан
@dmitryKovalskiy
программист средней руки
На уровне бредовой версии есть такая мысль -
select what you need from table1 as t1
inner join table1 as t2 ON (t1.col1 = t2.col2 AND t1.col2 = t2.col1)
where t1.col1 = 'text'

Но стоит признать что вопрос сформулирован довольно мутно и что вы понимаете под "противоположны" мне не очень ясно.
Ответ написан
Комментировать
streetflush
@streetflush
Давайте по порядку.
Если перефразировать вопрос, то, нужно найти все записи в таблице, значения которых встречаются в других строках таблицы только зеркально отображены по столбцам.

Select  DISTINCT  t1.* from table as t1
join table as t2 on t1.col1 = t2.col2 and t1.col2 = t2.col1 and t1.col1="text1"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы