2012-02-15 2 views
0

Таблица

ID W1 W2 
1 a q 
2 a w 
3 b r 
4 c t 

То, что я хотел бы получить это, с помощью одного оператора SQL, чтобы запросить таблицу с помощью W2, и получить W2 взамен, где W1 является то же самое.MySQL внутреннее соединение отказ

т.е .:

запрос таблицы, попросите 'д'. q имеет 'a' для w1, поэтому я хочу привести w2 строк, которые также имеют «a» в их w1.

Как я могу это достичь? Это внутреннее соединение, я верю, но я терпеть неудачу.

Спасибо

ответ

4

Для чего-то простого, как это, вложенный запрос может быть проще (и, вероятно, будет столь же быстро или быстрее, если вы получаете случайные мультипликативные результаты объединения):

SELECT * FROM TableName WHERE W1 IN (SELECT W1 FROM TableName WHERE W2='q') 

Вы также можете сделать это с помощью внутреннего соединения.

Косвенно:

SELECT * FROM TableName t1, TableName t2 
WHERE t1.W1=t2.W1 
AND t1.W2='q' 

В явном виде:

SELECT * FROM TableName t1 
INNER JOIN TableName t2 
ON t1.W1=t2.W1 
WHERE t1.W2='q' 
+2

+1 для различных возможностей. Однако, я думаю, что в третьем примере есть ошибка. Я думаю, что 'WHERE t1.w2 = 'q'' нужно перенести в конец инструкции. –

+0

@MarkWilkins Отредактировано. – Borealid

1
SELECT t2.W2 
    FROM YourTable t1 
     INNER JOIN YourTable t2 
      ON t1.W1 = t2.W1 
    WHERE t1.W2 = 'q' 
+0

Спасибо вам большое. – Phil

1
SELECT ID, 
CASE 
    WHEN W1=W2 THEN W1 
    ELSE W2 
END CASE 
FROM Table 
Смежные вопросы