2013-09-02 12 views
1

Je cherche à joindre deux tables non liées dans une seule table afin que je puisse trier par un champ commun et limiter le jeu de résultats combinés à afficher sur la page.Tables de jointure SQL sans champ commun

Exemple

Table 1 
Field1 | Field2 | Field3 | date_posted 
-------------------------------------- 
Blah | Blah2 | Blah3 | 2013-02-01 


Table 2 
Field4 | Field 5 | date_posted 
------------------------------ 
Blah4 | Blah5 | 2013-01-01 


Result 
Field1 | Field2 | Field3 | Field4 | Field5 | date_posted 
-------------------------------------------------------- 
Blah | Blah2 | Blah3 | NULL | NULL | 2013-02-01 
NULL | NULL | NULL | Blah4 | Blah5 | 2013-01-01 

La raison est que j'ai installé précédemment une base de données pour afficher ces tables sur des pages séparées et maintenant le client veut les combiner en une seule page. Si j'exécute les requêtes séparément, puis que je combine les données en php, il y a certaines questions telles que la pagination ainsi que le fait de devoir sélectionner une quantité définie de chacune, même si elles ne sont pas les dernières.

Répondre

4

Aucun rejoindre nécessaire:

select field1, field2, field3, null as field4, null as field5, date_posted 
from table_1 
union all 
select null, null, null, field4,   field5,   date_posted 
from table_2 

Pour trier une colonne spécifique, il suffit d'ajouter un order by

select field1, field2, field3, null as field4, null as field5, date_posted 
from table_1 
union all 
select null, null, null, field4,   field5,   date_posted 
from table_2 
order by date_posted 

Notez que dans une UNION l'ordre par fonctionne toujours sur le résultat, et non en les parties individuelles. Donc, même s'il est placé juste après la seconde sélection, il va tout trier.

Pour implémenter la pagination en utilisant LIMIT

+0

ajouter la commande par et limite à la fin et cela est correct. –

+0

@ArthurFrankel: quel ordre par doit être utilisé? Je ne vois aucune référence dans la question que le résultat devrait être ordonné par une colonne spécifique (bien qu'il soit probablement logique de commander par la colonne de date) –

+0

De sa question "ainsi je peux trier par un champ commun et limiter le combiné resultset à afficher sur la page "Je supposais que la date_posted était le champ commun car il est commun à travers les tables. –

1
SELECT Field1, Field2, Field3, date_posted 
FROM Table1 
UNION 
SELECT Field4, Field5, date_posted 
FROM Table2 
ORDER BY date_posted LIMIT 20 
+1

Cela ne fonctionnera pas. Les deux parties de l'UNION ont un nombre différent de colonnes. Et HireSwish voulait avoir 6 colonnes, pas 3 ou 4. –

+0

Oui, mon mauvais ... vous avez besoin de nulls comme vous l'avez fait. –

1

Essayez ceci:

select field1, field2, field3, null field4, null field5, date_posted from table1 
union all 
select null field1, null field2, null field3, field4, field5, date_posted from table2 

SQL Fiddle: http://sqlfiddle.com/#!2/69a46/1

Questions connexes