我有三个表如下:
m(id INT, name TEXT)
tn(id INT, name TEXT, valueid INT)
tv(valueid INT, name TEXT)
在m表中只有唯一的条目。 'tn'表将包含至少一个与m.id字段匹配的值,通常有很多。最后,'tv'表有许多值,它们使用valueid字段关联回tn表。
结果是能够从m表中选择一个值,在'tn'表中找到它的相应值,就像m.id = tn.id一样。最后,我需要输出与tn.valueid字段关联的所有电视值。
输出就是这样
foo host bar
foo host foobar
bar host1 foo
其中第1列来自m.name,第2列来自tn.name,第3列来自tv.names。对于tv.names中的每个entrit,都会为我的查询生成一个新的输出行。
更新
到目前为止,我已经能够构建第一个查询,它允许我选择m中的唯一名称,并在tn.name中显示相关值:
select m.name, tn.name from m, tn where m.id = tn.id and m.id = 128;
我需要扩展它以包含第三个表,并通过其他两个表中的valueid字段限制选择。
感谢。
答案 0 :(得分:1)
保持当前符号,您可以使用相同的方法添加第三个表:
select m.name, tn.name, tv.name
from m, tn, tv
where m.id = tn.id
and tn.valueid = tv.valueid
and m.id = 128
;
但是,我认为现在大多数人认为使用ANSI连接表示法更好,这更明确:
SELECT m.name, tn.name, tv.name
FROM m
JOIN tn ON tn.id = m.id
JOIN tv ON tv.valueid = tn.valueid
WHERE m.id = 128
;
(更明确的是,某些条件包含在特定的ON
子句中,阐明了连接的性质,而不是将所有内容放在一个大的WHERE
子句中。)