我有两个表,一个包含不同类别的值选择,另一个'master'表引用第一个主键的文本值。
表1
CREATE TABLE IF NOT EXISTS `defaultvalues` (
`default_ID` int(11) NOT NULL AUTO_INCREMENT,
`columnName` varchar(100) NOT NULL,
`defaultValue` varchar(100) NOT NULL,
PRIMARY KEY (`default_ID`),
UNIQUE KEY `columnName` (`columnName`,`defaultValue`)
)
表2
CREATE TABLE IF NOT EXISTS `master` (
`master_ID` int(11) NOT NULL AUTO_INCREMENT,
`size` int(11) NOT NULL,
`madeby` int(11) NOT NULL,
`type` int(11) NOT NULL,
`colour` int(11) NOT NULL,
`notes` text NOT NULL,
`issueDate` datetime NOT NULL,
`ceMark` text NOT NULL,
`batchNumber` text NOT NULL,
PRIMARY KEY(master_ID
)
)
每行的master.size是defaultvalues表中的P.key。
E.g。 master.colour = 234,234 = defaultvalues.defaultValue ='red'
E.g。 master.size = 345,345 = defaultvalues.defaultValue ='small'
现在我想运行一个查询,该查询返回'master'表,其中包含颜色,大小,类型,文本值的文本值,来自'defaultvalues。 defaultValue'并准备好进一步处理。
我一直在尝试子查询和临时表,但我无法让它工作
当前系统依赖于PHP和多个查询以及构建数组。
必须有一个更优雅的解决方案。
我希望这是有道理的。
任何提示或建议都非常赞赏。
戴夫
答案 0 :(得分:2)
您需要多次将主表连接到defaultvalues表。像这样:
SELECT m.*, d.defaultvalue as sizevalue, d2.defaultvalue as colorvalue...
FROM master m
JOIN defaultvalues d ON m.size = d.default_id
JOIN defaultvalues d2 ON m.color = d2.default_id
...
答案 1 :(得分:0)
我最终做了什么......虽然它有效但我仍然不高兴。必须有更好的东西......
SELECT m。*,
(SELECT defaultValue FROM defaultvalues WHERE default_ID = m.colour)AS myColour, (SELECT defaultValue FROM defaultvalues WHERE default_ID = m.size)AS mySize
FROM master m 在哪里m.master_ID = 1;