2009-08-18 19 views
6

Zarys tabel w pytaniu, są następujące:wyniki wstawki podzapytania w tabeli ze stałą

Mam tabeli, pozwala nazwać go dołączyć, że ma dwie kolumny, zarówno kluczy obcych do innych tabel. Nazwijmy te dwie kolumny login, a buildingid więc dołącz wygląda jak

+--------------+ 
| join   | 
|--------------| 
|userid  | 
|buildingid | 
+--------------+ 

I w zasadzie trzeba wstawić kilka wierszy w tabeli. Każdy użytkownik zostanie przypisany do wielu budynków poprzez wprowadzenie wielu wpisów w tej tabeli. Tak więc użytkownik może 13 być przypisane do budynków 1, 2 i 3 według następującego

13 1 
13 2 
13 3 

próbuję dowiedzieć się, jak to zrobić w zapytaniu, czy numery budowlanych są stałe, to znaczy ja” m przypisywanie grupy osób do tych samych budynków. Zasadniczo (jest to niepoprawne) Chcę wykonać:

insert into join (userid, buildingid) values ((select userid from users), 1) 

Czy to ma sens? Próbowałem również używać

Błąd, na który napotykam jest to, że podzapytanie zwraca więcej niż jeden wynik. Próbowałem również utworzyć sprzężenie, w zasadzie za pomocą kwerendy wyboru statycznego, która również nie powiodła się.

Jakieś myśli?

Dzięki Chris

Odpowiedz

20

Prawie! Jeśli chcesz wstawić wartości do zapytania, nie próbuj umieszczać ich w klauzuli values. insert może przyjąć argument select dla wartości!

insert into join (userid, buildingid) 
select userid, 1 from users 

Ponadto, w duchu nauki więcej, można utworzyć tabelę, która nie istnieje, używając następującej składni:

select userid, 1 as buildingid 
into join 
from users 

który działa tylko wtedy, gdy tabela nie istnieje, ale jest to szybki i brudny sposób na tworzenie kopii stołowych!

+0

Ciasto! Tak blisko! To było to! Po prostu wyjaśnienie, czy możliwe jest łańcuch wielu instrukcji wyboru, aby wykonać wiele wstawień, kiedy można użyć klauzuli wartości? –

+1

Nie w T-SQL, niestety. Jeśli kiedykolwiek użyjesz MySQL, który obsługuje łączenie wartości "razem". To, co możesz * zrobić *, to 'wstaw do join (userid, buildingid) select * from (wybierz 1, 1 union all wybierz 2, 1 union wszystko wybierz 3, 1 ...)'. – Eric

+0

Ah, bardzo sprytny. Jeszcze raz dziękuję za pomoc! –