Reputation: 1053
I have 2 SQL result datasets that I need merged into one to look like:
Final Merged Table
-------------
320 Sydney
321 Brisbane
322 Melbourne
The SQL to achieve this is a little more complicated since every data column is saved in the DB as a separate record against the User ID (due to Wordpress and the way it stores 'meta_value' data)
First result set:
User Table (A)
-------------
320 119
321 120
322 121
Achieved with:
SELECT wp_frm_items.id, meta_value AS city FROM `wp_frm_items`
INNER JOIN `wp_frm_item_metas` on wp_frm_item_metas.item_id = wp_frm_items.id
WHERE `form_id` = 9 AND field_id = 219
Second result set:
Location Table (B)
-------------
119 Sydney
120 Brisbane
121 Melbourne
Achieved with:
SELECT wp_frm_items.id, meta_value FROM `wp_frm_items`
INNER JOIN `wp_frm_item_metas` on wp_frm_item_metas.item_id = wp_frm_items.id
WHERE `form_id` = 10
MySQL keeps telling me I have an error in my final join code at line 7 "INNER JOIN": (the above 2 SQL statements work fine)
SELECT *
FROM (SELECT wp_frm_items.id, meta_value AS city FROM `wp_frm_items`
INNER JOIN `wp_frm_item_metas` on wp_frm_item_metas.item_id = wp_frm_items.id
WHERE `form_id` = 9 AND field_id = 219 ) AS A
INNER JOIN
SELECT *
FROM (SELECT wp_frm_items.id, meta_value FROM `wp_frm_items`
INNER JOIN `wp_frm_item_metas` on wp_frm_item_metas.item_id = wp_frm_items.id
WHERE `form_id` = 10) AS B
ON A.city = B.id
Can anyone shed some light for me on how I can achieve this?
Upvotes: 0
Views: 96
Reputation: 116498
You're very close. The short answer is you don't need the SELECT * FROM
in the join clause, just specify the (derived) table itself:
SELECT *
FROM (SELECT wp_frm_items.id, meta_value AS city FROM `wp_frm_items`
INNER JOIN `wp_frm_item_metas` on wp_frm_item_metas.item_id = wp_frm_items.id
WHERE `form_id` = 9 AND field_id = 219 ) AS A
INNER JOIN
(SELECT wp_frm_items.id, meta_value FROM `wp_frm_items`
INNER JOIN `wp_frm_item_metas` on wp_frm_item_metas.item_id = wp_frm_items.id
WHERE `form_id` = 10) AS B
ON A.city = B.id
Upvotes: 1