【发布时间】:2013-03-14 23:24:51
【问题描述】:
我正在尝试编写一个 SQL 查询来查看单个 MySQL 数据库表 (exp_playa_relationships),该表存储 CMS 帖子的关系数据,其数据结构如下所示:
rel_id | parent_entry_id | parent_field_id | child_entry_id
-----------------------------------------------------------------
55 | 3 | 2 | 1
56 | 3 | 2 | 4
58 | 1 | 2 | 4
59 | 8 | 4 | 2
60 | 8 | 5 | 1
63 | 4 | 2 | 3
64 | 9 | 4 | 6
65 | 9 | 5 | 3
rel_id 是唯一的,其他列不是。
我想从上面的数据中生成以下内容:
event_data_id | user_id | event_id
--------------------------------------
8 | 1 | 2
9 | 3 | 6
parent_field_id 值本身在最终输出中被丢弃,但需要确定该行的 child_entry_id 是否表示 user_id 或 event_id。
parent_entry_id 是event_data_id。
所以用简单的英语我想:
- 筛选具有
parent_field_id值为4或5的行 - 在这些行中,我想加入所有共享相同
parent_entry_id的行。 - 将
parent_entry_id返回为event_data_id。 - 如果同一行的
parent_field_id是5,则将child_entry_id作为user_id返回。 - 如果同一行的
parent_field_id是4,则将child_entry_id作为event_id返回。
我当前的 SQL 查询(不工作)是这样的:
SELECT
t1.`parent_entry_id` AS event_data_id,
t1.`child_entry_id` AS user_id,
t1.`child_entry_id` AS event_id
FROM `exp_playa_relationships` AS t1
INNER JOIN `exp_playa_relationships` AS t2
ON t1.`parent_entry_id` = t2.`parent_entry_id`
WHERE t1.`parent_field_id` = 4 OR t1.`parent_field_id` = 5
我无法具体弄清楚的是如何避免在 parent_entry_id 上创建重复项(SQL 每行创建 2 个新行)以及如何根据 @987654350 返回 child_entry_id 作为 user_id 或 event_id @值。
任何想法都将不胜感激。
【问题讨论】:
标签: sql select join where rows