webForumDet fria alternativet

Fylla poster tabell ifrån annan?

Databaser & SQL

5 svar · 278 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#1

Hur gör jag detta?

Tabell a
a_text
----------------------
a
b
c
d

Tabell b
b_text | b_bool
-----------------------
a | 0
b | 1
c | 0

Efteråt så skulle jag vilja att tabell b skall se ut:
a | 0
b | 1
c | 0
d | 0

Alltså har motsvarande post i tabell b 1 i kolumnen b_bool så skall den inte "röras".

Medlem sedan juni 200032 967 inlägg
#2

Jag ger ett förslag trots att du inte angett vilken dbms du använder...

INSERT INTO tabell b (b_text, b_bool)
SELECT a_text, 0 FROM tabell a 
WHERE NOT a_text IN (SELECT b_text FROM tabell b WHERE b_bool = 1)
Medlem sedan dec. 200012 464 inlägg
#3

Varför

WHERE b_bool = 1

?

Det finns vissa DBMS som hanterar nedanstående fel. (Sorgligt men sant.)

NOT a_text IN
a_text NOT IN

är säkrare.

Medlem sedan juni 200032 967 inlägg
#4

LarsG skrev:

Varför

WHERE b_bool = 1

?

Om du frågar mig så skrev jag mest så för att Travoni skrev att det var det som gällde. Jag förstår dock inte din fråga riktigt...

Kanske är frågan felställd / otydlig?
Kanske är tabellstrukturen skum?

Medlem sedan dec. 200012 464 inlägg
#5

Om man har med villkoret b = 1 i subselecten så kommer man att göra insert på posterna a, c, d vilket inte stämmer med önskemålet.

Medlem sedan juni 200032 967 inlägg
#6

Jag förstod nog inte önskemålet då.

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
132 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
136 ms — ändringar (db)