我有一個表ce_relations和一個表ce_values,我想將它與表ce_combined_values結合使用。 ce_combined_values表應該與ce_relations具有完全相同的行數。但是,下面所述的查詢不會返回ce_values.user_id列中user_id和friend_id存在的行。我試圖通過使用IFNULL語句來解決這個問題,但我想在WHERE clausule中還缺少一個額外的條件......歡迎任何幫助!如果表列中沒有重疊,則使用標準值
INSERT INTO ce_combined_values (user_id, friend_id, relation_degree, user_value, friend_value, relation_value)
SELECT a.user_id, a.friend_id, a.relation_degree, IFNULL(b.1d_value, 0) as user_value, IFNULL(c.1d_value, 0) as friend_value, Least(b.1d_value, c.1d_value) as relation_value
FROM ce_relations a, ce_values b, ce_values c
WHERE a.relation_degree = 1 AND b.user_id = a.user_id AND c.user_id = a.friend_id AND b.user_id <> c.user_id
Union all
//same select query is used for relation_degree 2 with 2d_values and relation_degree 3 with 3d_values.
編輯:
例如,這是我想達到的目標:
表ce_relations:
+---------+-----------+-----------------+
| user_id | friend_id | relation_degree |
+---------+-----------+-----------------+
| 1 | 3 | 1 |
| 2 | 1 | 1 |
| 3 | 4 | 1 |
+---------+-----------+-----------------+
表ce_values:
+---------+----------+----------+----------+
| user_id | 1d_value | 2d_value | 3d_value |
+---------+----------+----------+----------+
| 1 | 5 | 10 | 33 |
| 2 | 10 | 12 | 44 |
| 3 | 20 | 13 | 55 |
+---------+----------+----------+----------+
應該成爲ce_combi斯內德值(刪除relation_degree和relation_value的可讀性)
+---------+-----------+------------+--------------+
| user_id | friend_id | user_value | friend_value |
+---------+-----------+------------+--------------+
| 1 | 3 | 5 | 20 |
| 2 | 1 | 10 | 5 |
| 3 | 4 | 20 | 0 |
+---------+-----------+------------+--------------+
,但目前返回
+---------+-----------+------------+--------------+
| user_id | friend_id | user_value | friend_value |
+---------+-----------+------------+--------------+
| 1 | 3 | 5 | 20 |
| 2 | 1 | 10 | 5 |
+---------+-----------+------------+--------------+
的ce_combined_values表應具有行作爲ce_relations完全相同的量。但是,下面所述的查詢不會返回ce_values.user_id列中存在user_id和friend_id的行--- 不清楚您嘗試實現的內容。你能給個例子嗎? – SouravA 2014-10-01 13:32:37
目前尚不清楚你需要輸出什麼。如果您使用的是「UNION ALL」,則輸出將是第一個表中的行數+下一個表中的行數。 – 2014-10-01 13:38:28
我不確定,但聽起來好像你想要一個'左連接' – 2014-10-01 13:38:39