MYSQL连接两个表

时间:2014-05-25 22:12:10

标签: php mysql

我有两个表,一个包含不同类别的值选择,另一个'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和多个查询以及构建数组。

必须有一个更优雅的解决方案。

我希望这是有道理的。

任何提示或建议都非常赞赏。

戴夫

2 个答案:

答案 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;