从另一个表MYSQL参考表
问题描述:
我是新来的SQL。作为一个例子是我的主表:从另一个表MYSQL参考表
CREATE TABLE IF NOT EXISTS `main`.`item` (
`item_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'auto incrementing item_id of each job, unique index',
`item_title` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT 'item title, not-unique',
`item_status`
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='item data';
我的参考表:
CREATE TABLE IF NOT EXISTS `main`.`status` (
`status_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'auto incrementing status_id of each status, unique index',
`status_name` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT 'status name, unique',
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='status';
我如何引用主表中的状态表的ID,所以与相关联的状态主要项目。
此外,由于这是我的第一个DB,如果我犯了其他错误,请随时突出显示它们。
答
简单:
SELECT * FROM main.item, main.status
where main.item.item_status = main.status.status_id
这将加入所有行形成item
与status
所有行有一个匹配的ID。它不会给你任何有item_status
的行,这在表status
中是未知的!
您应该只保留表item_status的最后一次创建。
答
你的主表应该有一个status_id列。该列应被指定为外键,并链接到状态表的主键。
这将使主表的item_status列不必要。使用主表中的status_id值查找前端状态表的主键。
+0
谢谢你的回复。所以我应该这样做: ''''FOREIGN KEY(status_id)REFERENCES status(id) – 2014-09-05 19:16:58
OP还应该看看https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html – 2014-09-05 18:31:01
而不是使用连接的语法:http:// stackoverflow .com/questions/1018822/inner-join-on-vs-where-clause – 2014-09-05 18:35:01