webForumDet fria alternativet

Join utan träff i ena tabellen?

Databaser & SQL

8 svar · 538 visningar · startad av leniz

Medlem sedan aug. 2001676 inlägg
Frågan#1

Hej!

Försöker skriva en kod som ska plocka fram träffar ur en tabell där det INTE finns någon förekomst av träffen i en annan tabell.

Alltså i TABELL 1 finns objekt som har ett idnummer (objektid), om det finns några tillbehör till objektet så lagras de i TABELL 2 där objektetd idnummer även finns, det är så jag kopplar ihop dem.

sql="select o.objektid, o.objektnamn, count(tillbehorid) as t.x from tillbehor as t inner join objekt as o on o.objektid=t.objektid where t.x=0"

Mvh Lena

Medlem sedan dec. 200012 464 inlägg
#2

Du vill alltså ha de objekt som inte har något tillbehör?

select <kolumner>
  from objekt
  where not exists
  (select * 
      from tillbehor
     where objekt.objektid = tillbehor.objektid)

Flyttas från ASP

Medlem sedan aug. 2001676 inlägg
#3

Hej!

Ja precis, men det är lite mer villkor med också och fler tabeller med inner join emellan.
Så jag testade lägga till detta på slutet:

and not exists (select t.objektid from tillbehor as t inner join objekt as o on t.objektid=o.objektid)

Då får jag detta felmeddelande:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'exists (select

Kan jag inte använda inner join i de här satserna om det ska fungera?

Medlem sedan aug. 2001676 inlägg
#4

Hej igen!

Testade givetvis din variant utan inner join i satsen mellan parentesen också men det ger samma felmeddelande.

Mvh Lena

Medlem sedan mars 20034 471 inlägg
#5

Pröva:

select <kolumner>
  from objekt
  where <andra villkor> and objektid not in
  (select objektid 
      from tillbehor)
Medlem sedan aug. 2001676 inlägg
#6

Hej!
Tack för förslaget men det ger tyvärr detta felmeddelande:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select objektid from tillbehor)' at line 1

Medlem sedan juni 200032 967 inlägg
#7

Exakt hur ser din SQL-fråga ut då?
Vilken version av MySQL använder du?

Medlem sedan dec. 200012 464 inlägg
#8

Felet låter som om du använder 4.0 (eller äldre) av Mysql, som inte har stöd för subselect.

select <kolumner>
  from objekt 
  left join tillbehor
     on objekt.objektid = tillbehor.objektid
  where tillbehor.objektid is null
Medlem sedan aug. 2001676 inlägg
#9

Toppen! Det här fungerade!
Stort tack och trevlig helg!

259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)