2010-11-22 17 views
4

Ok, ich habe vier Tabellen:Wie Vereinigungs SELECT zwei Tabellen mit IDs der beiden Tabellen?

Tabelle 1: "f_withholdings"

alt text

Tabelle 2: "f_wh_list"

alt text

Tabelle 3: "f_rpayments"

alt text

Tabelle 4: "f_rp_list"

alt text

Tabelle 1 und Tabelle 2 sind miteinander verbunden durch wh_id Feld und Tabelle 3 und Tabelle 4 durch rp_id verbunden sind, wie in der Abbildung zu sehen.

ich Vereinigung wollen wählen Sie beiden Tabellen in ein, so etwas wie:

SELECT 
`wh_list_id`, 
`wh_name` AS `name`, 
`wh_list_date` AS `date`, 
`wh_list_amount` AS `amount`, 
`wh_list_pending` AS `pending`, 
`wh_list_comment` AS `comment` 
FROM 
`f_wh_list` LEFT JOIN `f_withholdings` ON `f_wh_list`.`wh_id` = `f_withholdings`.`wh_id` 

UNION ALL 

SELECT 
`rp_list_id`, 
`rp_name` AS `name`, 
`rp_list_date` AS `date`, 
`rp_list_amount` AS `amount`, 
`rp_list_pending` AS `pending`, 
`rp_list_comment` AS `comment` 
FROM `f_rp_list` LEFT JOIN `f_rpayments` ON `f_rp_list`.`rp_id` = `f_rpayments`.`rp_id` 

und ich bekomme diese:

alt text

nur eine ID-Feld ist von dem ersten wh_list_id in Folge SELECT Tabelle, aber keine rp_list_id

Ich hätte gerne beide IDs in der Ergebnistabelle, etwas wie Belo w:

alt text

Dank!

Antwort

6

Wählen Sie einfach null als die Spalte, die von jedem fehlt.

SELECT 
`wh_list_id`, 
null AS `rp_list_id`, 
`wh_name` AS `name`, 
`wh_list_date` AS `date`, 
`wh_list_amount` AS `amount`, 
`wh_list_pending` AS `pending`, 
`wh_list_comment` AS `comment` 
FROM 
`f_wh_list` LEFT JOIN `f_withholdings` ON `f_wh_list`.`wh_id` = `f_withholdings`.`wh_id` 

UNION ALL 

SELECT 
null as `wh_list_id`, 
`rp_list_id`, 
`rp_name` AS `name`, 
`rp_list_date` AS `date`, 
`rp_list_amount` AS `amount`, 
`rp_list_pending` AS `pending`, 
`rp_list_comment` AS `comment` 
FROM `f_rp_list` LEFT JOIN `f_rpayments` ON `f_rp_list`.`rp_id` = `f_rpayments`.`rp_id` 
+1

+1: Gleicher Kommentar zu Dmitri über Spaltenaliase - die meisten Datenbanken benötigen keinen expliziten Alias ​​in Anweisungen, die nach der ersten Anweisung einer UNION definiert sind. –

1

einfach eine entsprechende Nullspalte jeder Abfrage hinzufügen (UNIONs aus der Spaltenposition arbeiten, sie kümmern sich nicht um Namen oder Aliasnamen):

SELECT 
`wh_list_id`, 
NULL, 
... 

SELECT 
NULL, 
`rp_list_id`, 
... 

Es kann etwas besser sein die halten IDs in einer Spalte und fügen ein Feld hinzu, das angibt, aus welcher Abfrage die ID stammt (z. B. SELECT 'wh_list', ...).

+0

+1: Wenn Sie auf eine Spalte verweisen möchten, sind Aliase wichtig;) Die Spaltenreferenz wird durch die erste der UNION-Anweisungen definiert. –

+0

Nur wenn du es mit Namen referenzieren willst :) (was, ehrlich gesagt, solltest du) – Dmitri

Verwandte Themen