2012-10-14 73 views
0

我想做一个选择语句,我只是不能得到它的工作。sql多对多选择与加入

我有3个表: placestagsplaces_tags

Places: 
    - id 
    - name 

Tags: 
    - id 
    - name 

Places_tags: 
    - place_id 
    - tag_id 
    - order 

我想选择的地方,加入该插入(使用顺序)的第一个标签

 
     SELECT p.*, t.tag_id AS tag 
     FROM `places` as p 
     LEFT JOIN places_tags t ON (t.place_id = p.id) 
     group by p.id 

这就是我马上。 我需要添加类似ORDER BY命令DESC ...

我认为我没有做正确的。

+1

请考虑改善您accepetance率。 – SchmitzIT

+0

感谢您的意见...我会这么做 – Amir

回答

0

类似下面应该工作:

SELECT 
    p.name AS "place", 
    t.name AS "firstTag" 
FROM 
    places p 
    LEFT JOIN 
    places_tags pt1 
     ON pt1.place_id = p.id 
    LEFT JOIN 
    places_tags pt2 
     ON pt2.place_id = p.id AND pt2.tag_id < pt1.tag_id 
    LEFT JOIN 
    tags t 
     ON t.id = pt1.tag_id 
WHERE 
    pt2.tag_id IS NULL 
+0

无法看到这个答案对我有什么帮助 – Amir

+0

@Amir基本的想法是对id列在结果中最小的记录使用自己的'LEFT JOIN'和过滤器。 – btiernay

+0

@Amir我更新了我的解决方案以应用此方法。对不起,如果它不明确:) – btiernay