MySQL查询条件或子查询

时间:2015-03-03 01:19:57

标签: mysql

我发现SQL相关问题很难用会话表达,所以请原谅我,如果没有意义的话。

我将数据从CMS数据库迁移到MySQL,我希望尽可能简化数据结构。当前类别方案具有 7个类别,并且项目与类别关系设置为多对多关系,因此需要联结表。

最好将其设置为两个一对多关系,以便不需要额外的表。我需要的实际类别设置如下:

第1类

Option 1
Option 2

第2类

Option 3
Option 4
Option 5
Option 6
Option 7

每个项目属于Category 1的一个值,Category 2属于一个值。这是我创建的查询的一般形式:

SELECT items.entry_id, categories.cat_id
FROM items
INNER JOIN categories
ON items.entry_id = categories.entry_id
WHERE items.item_type = 6

如何添加条件查询或子查询,以便获得SELECT子句的结果,如:

SELECT items.entry_id, categories.cat_id1, categories.cat_id2

其中cat_id1cat_id2的值是上述值吗?

**** ****更新 我在获取所需的查询方面取得了一些进展(表格太复杂了,无法在此处发布示例,但这里是一个示例查询):

SELECT exp_weblog_data.entry_id, 
exp_weblog_data.field_id_27 AS Title, 
exp_weblog_data.field_id_29, 
exp_weblog_data.field_id_32, 
exp_weblog_data.field_id_33, 
exp_weblog_data.field_id_28, 
exp_weblog_data.field_id_84, 
exp_relationships.rel_child_id, 
CASE WHEN exp_category_posts.cat_id = '15' OR exp_category_posts.cat_id = '16' THEN exp_category_posts.cat_id END as cat1,
CASE WHEN exp_category_posts.cat_id = '17' OR exp_category_posts.cat_id = '20' THEN exp_category_posts.cat_id END as cat2
FROM exp_weblog_data
INNER JOIN exp_relationships
ON exp_weblog_data.entry_id = exp_relationships.rel_parent_id
INNER JOIN exp_category_posts
ON exp_weblog_data.entry_id = exp_category_posts.entry_id
WHERE exp_weblog_data.weblog_id = 6

这为我提供了我想要的Cat1和Cat 2的两列但是这里仍然存在两个问题 - exp_category_posts上的内部连接导致每个记录有2行,其中我只想为entry_id的每个值设置一行。其次,在case语句中,如果cat_id = 15,我想设置A的值,如果cat_id = 16,我想设置B,但我似乎无法找到正确的语法而不会出错。

我希望这可以解决一些问题!

1 个答案:

答案 0 :(得分:0)

在设置多对多关系时,没有合理的方法可以避免额外的表格。

有多个列的多列(cat_id1cat_id2,...)。

将多个ID放在一列(“123,234,345”)中。

这两个问题都会导致比映射表更糟糕的问题。