我想让make查询从表'a'中选择所有名称,其中表'b'我有id_one ='3'。 id_two是表中的id记录 'a',两个记录与id_one ='3'有关系。我如何进行查询?
CREATE TABLE IF NOT EXISTS `a` (
`id` int(11) NOT NULL,
`name` varchar(11) NOT NULL,
`value` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Zrzut danych tabeli `a`
--
INSERT INTO `a` (`id`, `name`, `value`) VALUES
(1, 'lalala', 0),
(2, 'allalala', 0);
CREATE TABLE IF NOT EXISTS `b` (
`id_one` int(11) NOT NULL,
`id_two` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Zrzut danych tabeli `b`
--
INSERT INTO `b` (`id_one`, `id_two`) VALUES
(3, 1),
(3, 2);
答案 0 :(得分:3)
这就是你想要的:
select Name
from a inner join b on a.id = b.id_two
where b.id_one = 3
答案 1 :(得分:0)
SELECT * FROM a
JOIN b on a.id = b.id_two;
试试。
答案 2 :(得分:0)
您的问题标题提到左连接,但您不需要左连接来进行您描述的查询。
左连接有助于找到与您期望的方式不匹配的内容。因此,在这种情况下使用左连接取决于您要查找的内容。如果您正在寻找没有相应表格的b.id_two条目,
select Name, b.* from b left join a on a.id = b.id_two
这将为您提供一个表,其中列出了表b中的每一行,其中NULL代替了表a中没有匹配项的名称。
同样,如果您要查找b.id_two中没有条目的名称,您可以使用
select Name, b.* from a left join b on a.id = b.id_two
如果要强制始终存在对应关系,则可以在父表和子表之间定义外键约束。
答案 3 :(得分:0)
select Name
from a join b on a.id = b.id_two
where b.id_one = 3;
也会努力得到你的答案。我可能还建议你显着改进你的create table语句以包括索引。 E.G。
CREATE TABLE IF NOT EXISTS `a` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(11) NOT NULL,
`value` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `b` (
`id_one` bigint(20) NOT NULL,
`id_two` bigint(20) NOT NULL,
KEY `FKCAFBB09382DEAC` (`id_one`),
CONSTRAINT `b_a_1` FOREIGN KEY (`id_two`) REFERENCES `a` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我也会使用bigint作为主键并使用charset = utf8
现在,将应用程序迁移到多语言只是常见的,现在就开始奠定基础。 IMHO