2011-09-12 13 views

Odpowiedz

7

Ta kwerenda tworzy tabelę zawierającą wszystkie możliwe pary identyfikatorów kontaktowych.

Na przykład, jeśli identyfikatory kontaktowe były 1, 2 i 3, co można uzyskać w wyniku

1 1 
1 2 
1 3 
2 1 
2 2 
2 3 
3 1 
3 2 
3 3 
2

To prosta odpowiedź: użyj zapytania wymienionego w przykładzie. Powinno działać dobrze. Chociaż to chyba zły pomysł, jeśli chcesz używać tej samej tabeli dwukrotnie, należy pamiętać, że trzeba przyłączyć „te” stoły ponieważ były różne:

SELECT c1.id as sender, c2.id as replier 
FROM contacts c1, contacts c2 
WHERE sender.id = replier.id 
+1

Nie masz tabel 'nadawca' lub' replier' dla klauzuli WHERE do pracy. Nie jest do końca jasne, co masz na myśli mówiąc "bądź świadomy, że musisz dołączyć do" tych "tabel, ponieważ były różne", gdy te dwie tabele są tym samym stołem. –

14

można dwukrotnie użyć jednej tabeli w zapytaniu przez podanie dwóch takich nazw.

Aliasy są często wprowadzane ze słowem kluczowym AS. Zwykle określasz także warunek łączenia (bez niego otrzymasz Cartesian Product tabeli połączonej ze sobą). Aby uzyskać preferencje, użyj jawnej notacji JOIN.

SELECT c1.id AS sender, c2.id AS replier 
    FROM contacts AS c1 
    JOIN contacts AS c2 ON c1.xxx = c2.yyy; 

Nie jest jasne, które kolumny mogą być użyte do łączenia w tym przykładzie; nie mamy żadnych informacji, które mogłyby pomóc w rozwiązaniu tego problemu.

Normalnie nie byłoby innej tabeli działać jako pośrednik, takich jak stół komunikaty:

SELECT c1.id AS sender, c1.email AS sender_email, 
     c2.id AS replier, c2.email AS replier_email, 
     m.date_time 
    FROM messages AS m 
    JOIN contacts AS c1 ON m.sender_id = c1.id 
    JOIN contacts AS c2 ON m.replier_id = c2.id; 
1

Tak, można użyć tej samej tabeli dwukrotnie, dając różne aliasy do stołu. Myślę, że nauka o samouczkach pomoże ci zrozumieć.

1

Tak, możesz użyć tej samej tabeli więcej niż raz w tym samym zapytaniu SELECT.

Należy pamiętać, że należy używać tylko nazw korelacji tabel (potocznie "aliasów"), gdy tabela pojawia się więcej niż jeden raz w ramach tego samego zakresu. Na przykład, następujące SELECT zapytanie dwukrotnie używa tej samej tabeli, ale ponieważ każdy z nich jest w odrębny zakresie (oddzielonych przez parametr UNION) ma tabeli nazwy korelacji jest wymagany:

SELECT id, 'Sender' AS contact_narrative 
    FROM contacts 
WHERE something = 1 
UNION 
SELECT id, 'Replier' AS contact_narrative 
    FROM contacts 
WHERE something = 2; 
Powiązane problemy