2 verschillende queries in 1 query voegen

Status
Niet open voor verdere reacties.

Mestreech

Gebruiker
Lid geworden
15 jun 2007
Berichten
20
Dames, heren,
Ben een leek in sql vandaar mijn vraag hier.
Ik heb losse 2 queries
Query 1:
[sql]
select
b.objectid, b.name as deelnemernummer, a.stringvalue as sofinummer
from
obj b, fieldvalue a
Where b.name like '155%'
and a.fieldid = 4473
and b.objectid = A.OBJECTID
[/sql]
Query 2:
[sql]
select
b.objectid, b.name as deelnemernummer, a.stringvalue as mailadres
from
obj b, fieldvalue a
Where b.name like '155%'
and a.fieldid = 4474
and b.objectid = A.OBJECTID
[/sql]
Beide querys halen de juiste data naar boven, echter....
Omdat zowel het mailadres als het sofinummer in hetzelfde veld staan (stringvalue) weet ik niet hoe ik deze velden in 1 query naar boven kan halen.
Kan het uberhaupt?
Ik ben erg benioewd
 
Laatst bewerkt door een moderator:
In de SQL die ik ken zou ik dat op de volgende manier doen, maar ik weet niet of dat in MySQL ook zo gaat:

[sql]SELECT b.objectid,
b.name as deelnemernummer,
a.stringvalue as mailadres,
a.stringvalue as sofinummer
FROM obj b, fieldvalue a
WHERE b.objectid = a.objectid
AND b.name like '155%'
AND (a.fieldid = 4473
OR a.fieldid = 4474)[/sql]
 
Laatst bewerkt door een moderator:
Hallo Edmoor,
Helaas, dat had ik al geprobeerd, maar dan krijg ik in de kolom mailadres en sofinummer beide de waarde van bv sofinummer.
Als er een mailadres bekend is, dan krijg ik 2 records, 1 met 2 keer het sofinummer en 1 met 2 keer het mail adres
 
Laatst bewerkt door een moderator:
Ja, dat is logisch uiteraard. Je vraagt ook twee records met 2x hetzelfde veld en alleen een andere omschrijving.
 
De inhoud van het betreffende veld is ook anders, dit is gerelateerd aan de fieldid.
Het is een bestaande oracle DB die ikzelf niet zo zou opgezet hebben maarja, daar kan ik niets aan veranderen
 
Gadver.. horizontale tabellen in een database. Net zo efficiënt als vierkante wielen onder een auto. Ik neem aan dat je een query doet op "extracted data" want niemand bouwt vrijwillig zo'n soort database ;)

Je kunt waarschijnlijk met een "JOIN" beide tabellen samen voegen in een enkele query.
 
In dat geval zou ik een view maken op die OBJ tabel.
 
Ben ondertussen ook aan het googlen / sufen geweest en heb de oplossing gevonden
Voor de geinteresserden:
[sql]
select
b.objectid,
b.name as deelnemernummer,
a1.stringvalue as sofinummer,
a2.stringvalue as mailadres
from
ms.obj b,
ms.fieldvalue a1,
ms.fieldvalue a2
Where
b.name like '155%'
and
a1.fieldid = 4473
and
a2.fieldid = 4474
and
b.objectid = A1.OBJECTID
and
b.objectid = A2.OBJECTID
[/sql]
Eigenlijk dus veel simpeler dan ik dacht (Tabel impliciet 2 maal benoemen :-)
 
Laatst bewerkt door een moderator:
Nu alleen nog even herschrijven naar een LEFT JOIN syntax om de query overzichtelijk te houden en omdat er in dit model geen garantie is dat je ook echt voor elk record uit ms.obj een bijbehorend record in a1 en a2 hebt,
en de fieldid voorwaarde verplaatsen naar de join omdat je alleen wilt joinen als het fieldid overeenkomt, versus alleen records teruggegeven als er een match is.

Code:
SELECT 
    b.objectid, 
    b.name AS deelnemernummer,
    a1.stringvalue AS sofinummer,
    a2.stringvalue AS mailadres
FROM 
    ms.obj b
LEFT JOIN 
    ms.fieldvalue a1 ON a1.objectid=b.objectid AND a1.fieldid = 4473
LEFT JOIN
    ms.fieldvalue a2 ON a2.objectid=b.objectid AND a2.fieldid = 4474
WHERE 
    b.name LIKE '155%'
 
Vaag. dit had je op moeten lossen via een FULL OUTER JOIN of een UNION ALL dacht ik. Gebaseerd om het feit dat je het als een record wilt zien.

@PgVincent: Ben benieuwd als hij hetzelfde resultaat behoud met een LEFT JOIN ipv zijn code. Volgens mij resulteert het weer in twee records ipv een samengevoegde. Kan zijn dat ik het slecht begrijp =)
 
Ben benieuwd als hij hetzelfde resultaat behoud met een LEFT JOIN ipv zijn code. Volgens mij resulteert het weer in twee records ipv een samengevoegde. Kan zijn dat ik het slecht begrijp =)

Zijn code is een impliciete INNER JOIN en zal dus alleen een resultaat geven als de waarde zowel in veld 4473 als in veld 4474 worden gevonden. Dat is iets anders dan met twee losse queries of een union.

Gegeven dat het objectid uniek is alle toepassingen zal er uit de JOIN ook maar één resultaat komen.
 
Heren, de query werkt goed, Ik krijg alle gegevens die ik wens, niets te weinig / te veel.
Toch dank voor het meedenken
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan