我有一个恰好已经设置的数据列表:
entryID fieldID Value
100 1 John
100 2 Smith
100 3 USA
101 1 Jane
101 2 Doe
101 3 USA
它的工作方式是,当创建“票证”时,它为该票证中的所有数据分配一个entryID,但每个字段也有自己的fieldID。因此,名字始终是1的fieldID,姓氏是2,等等。 我需要做的是创建一个如下所示的视图:
First Name Last Name Country
John Smith USA
Jane Doe USA
我需要能够在MySQL中执行此操作,而不是SQL或excel,因为其他一些类似的问题已得到解决。
答案 0 :(得分:0)
真的没有一种简单的方法可以在纯MySQL中实现这一点。 您需要对要显示为列的值调用JOIN。
例如:
SELECT
FirstName.Value AS 'First Name',
LastName.Value AS 'Last Name',
Country.Value AS 'Country'
FROM table_name t1
LEFT JOIN table_name AS FirstName
ON t1.entryID = FirstName.entryID AND FirstName.fieldID = 1
LEFT JOIN table_name AS LastName
ON t1.entryID = LastName.entryID AND LastName.fieldID = 2
LEFT JOIN table_name AS Country
ON t1.entryID = Country.entryID AND Country.fieldID = 3
GROUP BY t1.entryID
小提琴http://sqlfiddle.com/#!9/dcfc4/1
您应该基本上转换表格,以便按照您希望的方式反映数据。
如果您允许成员加入多个国家/地区,那么创建会员和国家/地区的ManyToMany关系会更有效。
成员
id | first_name | last_name
1 | John | Doe
2 | Jane | Doe
国家
id | name
1 | USA
2 | Germany
member_country
member | country
1 | 1
2 | 2
SELECT m.first_name AS 'First Name', m.last_name AS 'Last Name', c.name AS Country
FROM members AS m
JOIN member_country AS mc
ON m.id = mc.member
JOIN country AS c
ON c.id = mc.country