2012-07-07 5 views
0

J'ai colonnesComment joindre deux longues requêtes d'une table?

First name | last name | nr (individual number) | pref1 (preference1) | pref2 (preference2)| pref3(preference3) | situation | distance | sex 

avec 100 enregistrements dans une table ap

Dans les résultats de tout ce que je ne peux pas avoir des redondances. Cela signifie que lorsque le premier groupe de résultat reçoit le numéro individuel (colonne "nr") de l'exemple "2112", il ne peut pas être affiché dans le dernier des résultats.

SELECT DISTINCT nr FROM ap 

Les enregistrements de la première requête:

WHERE sex='F' and pref1='1' ORDER BY situation DESC, distance DESC 
AND WHERE (sex='F' and pref2='1' and situation= ' ') ORDER BY distance DESC 
and WHERE (sex='F' and pref3='1' and situation= ' ') ORDER BY distance DESC 
LIMIT 4 

Je voudrais me joindre à des résultats de deuxième requête:

WHERE sex='M' and pref1='2' ORDER BY situation DESC, distance DESC 
AND WHERE (sex='M' and pref2='2' and situation= ' ') ORDER BY distance DESC 
AND WHERE (sex='M' and pref3='2' and situation= ' ') ORDER BY distance DESC 
LIMIT 7 

puis rejoindre à tous les enregistrements de la dernière requête:

WHERE sex='F' and pref1='3' ORDER BY situation DESC, distance DESC 
AND WHERE (sex='F' and pref2='3' and situation= ' ') ORDER BY distance DESC 
AND WHERE (sex='F' and pref3='3' and situation= ' ') ORDER BY distance DESC 
LIMIT 10 

Est-il possible t o faire?

+0

Depuis le SQL vous démontrez est pas valide, il est assez difficile de ce que vous recherchez. Pouvez-vous s'il vous plaît montrer quelques exemples de lignes de table et un échantillon de ce que serait votre sortie de requête? –

Répondre

0

Essayez d'utiliser UNION, il est juste un exemple simple en utilisant UNION

0
SELECT DISTINCT nr FROM 
(select distinct nr from ap WHERE sex='F' and pref1='1' ORDER BY situation DESC, distance DESC Union 
select distinct nr from ap WHERE (sex='F' and pref2='1' and situation= ' ') ORDER BY distance DESC union 
select distinct nr from ap WHERE (sex='F' and pref3='1' and situation= ' ') ORDER BY distance DESC union 
LIMIT 4) 
UNION 
(select distinct nr from ap WHERE sex='M' and pref1='2' ORDER BY situation DESC, distance DESC union 
select distinct nr from ap WHERE (sex='M' and pref2='2' and situation= ' ') ORDER BY distance DESC union 
select distinct nr from ap WHERE (sex='M' and pref3='2' and situation= ' ') ORDER BY distance DESC union 
LIMIT 7 
) 
UNION 
(select distinct nr from ap WHERE sex='F' and pref1='3' ORDER BY situation DESC, distance DESC union 
select distinct nr from ap WHERE (sex='F' and pref2='3' and situation= ' ') ORDER BY distance DESC union 
select distinct nr from ap WHERE (sex='F' and pref3='3' and situation= ' ') ORDER BY distance DESC union 
LIMIT 10 
)) 
+0

union prendra seulement les lignes distinctes de la sélection –

+0

Le calcul relationnel ne garantit pas cela, mais probablement dans MYSQL/ORACLE ce que vous avez dit est juste. – Razvan

+0

Cela ne ressemble en rien à un SQL valide. Multiple 'WHERE' et plusieurs' ORDER BY' par groupe d'union? Ne va pas au travail ... –