【发布时间】:2017-07-04 16:41:39
【问题描述】:
我有以下结构:
CREATE TABLE person {
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(30) NOT NULL UNIQUE
}
CREATE TABLE field {
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL
}
CREATE TABLE fieldPerson {
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
fieldId INT(11) UNSIGNED,
personId INT(11) UNSIGNED,
value VARCHAR(30) NOT NULL,
FOREIGN KEY (fieldId) REFERENCES field(id),
FOREIGN KEY (personId) REFERENCES person(id)
}
总结得很好。基本上我们有默认字段name 和email,我们可以选择创建自定义字段,例如telephone、address 等。
我们可以有 n 个字段。我正在尝试找出一种方法来执行 SELECT 查询,该查询返回所有字段,而不使用子查询或数据库外部的额外工作(虽然可以使用连接)。
示例(电话是自定义字段):
TABLE person:
id name email
1 Test 1 test1@gmail.com
----
TABLE field:
id name
1 telephone
2 address
----
TABLE fieldPerson:
id fieldId personId value
1 1 1 +1 555 555 555
2 2 1 First St.
----
RESULTING QUERY
personId name email telephone Address
1 Test 1 test1@gmail.com +1 555 555 555 First St.
这可能吗?
谢谢。
编辑:
如果不可能,您可以建议使用子查询的最佳解决方案,但只能使用 SQL。
【问题讨论】:
-
但我猜JOIN是不可避免的。
-
当然,JOIN 没问题,只是不想依赖子查询
(SELECT ...) AS ... -
不,字段只有一个名称列。我需要收集它的值并用作列名。
-
更新您的问题,添加真实的数据样本
-
@scaisEdge 刚刚更新。