2014-09-05 89 views
0

我是新来的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,如果我犯了其他错误,请随时突出显示它们。

回答

0

简单:

SELECT * FROM main.item, main.status 
      where main.item.item_status = main.status.status_id 

这将加入所有行形成itemstatus所有行有一个匹配的ID。它不会给你任何有item_status的行,这在表status中是未知的!

您应该只保留表item_status的最后一次创建。

+2

OP还应该看看https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html – 2014-09-05 18:31:01

+0

而不是使用连接的语法:http:// stackoverflow .com/questions/1018822/inner-join-on-vs-where-clause – 2014-09-05 18:35:01

2

你的主表应该有一个status_id列。该列应被指定为外键,并链接到状态表的主键。

这将使主表的item_status列不必要。使用主表中的status_id值查找前端状态表的主键。

+0

谢谢你的回复。所以我应该这样做: ''''FOREIGN KEY(status_id)REFERENCES status(id) – 2014-09-05 19:16:58