我在MySQL的两个表两张表选择从哪儿第二表中的行应显示为列第一
id | name | date
1 | Test Entry | 12/12/2013
2 | Test Entry 2 | 12/12/2013
表注
id | entry_id | name | value
1 | 1 | note1 | value1
2 | 1 | note2 | value2
3 | 2 | note1 | value1
4 | 3 | note4 | value4
其中entry_id
在note
是id
的外键在entry
。
是否有任何解决方案,我可以创建一个SELECT
,会给我一个像下面的结果?
entry_id | name | note1 | note2 | note3
1 | Test Entry | value1 | value2 | -
2 | Test Entry 2 | value 1 | - | value3
我想避免LEFT JOIN
这里(当前实现这样工作),并希望加入note
只有一次,如果这是可能的。 LEFT JOIN
在这里不好,因为我不知道一个条目可以附加多少笔记。我目前的实现以这种方式工作,我首先通过note
中的名称获取所有不同的笔记,然后通过PHP为foreach构建SELECT。最后,SELECT
语句如下所示:
SELECT
E.id as entry_id,
E.name as name,
N1.value as note1_value,
N2.value as note2_value,
N3.value as note3_value
FROM entry E
JOIN LEFT note N1 ON E.id = N1.entry_id AND N1.name = 'note1'
JOIN LEFT note N2 ON E.id = N2.entry_id AND N2.name = 'note2'
JOIN LEFT note N3 ON E.id = N3.entry_id AND N3.name = 'note3'
事情变得棘手,当我在note
20-30次加入。
这将是我们更容易帮助你,如果你设置了[ SQL小提琴](http://sqlfiddle.com/) – 2013-05-02 18:43:54
立即处理该问题。 – user1478283 2013-05-02 18:47:14
JS小提琴网址:http://sqlfiddle.com/#!2/0b7ae/1 – user1478283 2013-05-02 18:54:33