2012-08-14 96 views
0

我有几个表的数据库字符串,一个被用来引用他人:搜索相关表

主表:

MAIN | table1 | table2 | table3 
     int | int | int 

该表的每一行对应一个产品,和包含一行的女儿表中的OID

然后,我有我的女儿表:

TABLE1 | name | adress | phone 
     | text | text | ... 

我的问题很简单,即使我刚开始使用数据库,我无法找到答案。

我想获得主表的行的oid(s)引用table1的行,其名称等于“bob”。

喜欢的东西:

SELECT * from main where table1.name = "bob" 

如果没有完整的解决方案,你能指出我一些文档? 我想我错过了词汇来寻找适当的方法来做到这一点。

由于通过提前

回答

1

你是说像SELECT oid FROM MAIN WHERE table1 IN (SELECT oid FROM TABLE1 WHERE name = 'bob')

table1 ==外键从MAINTABLE1

+0

我把这个作为解决方案,但它完全取决于我的上下文。我在每个表中都有oid coolumns,我必须使用SELECT列FROM。 。 。而不是我的框架中的SELECT *。这导致模棱两可的错误。 – jlengrand 2012-08-14 13:39:27

2

假设OID是表1中以及在主表中的列:

SELECT m.oid 
FROM main m 
INNER JOIN table1 t 
ON m.table1 = t.oid 
WHERE t.name = 'bob' 
+1

现在让我们继续[嵌套查询与连接](http://stackoverflow.com/a/3380918/1028230);)如果你想要TABLE1的任何字段,这是一个更好的答案。我可能已经从字面上解释了这个问题。 – ruffin 2012-08-14 13:05:07

+0

而在这种情况下,您的答案会更好吗?其实,我需要所有的元素,所以我的查询将是一个select * from – jlengrand 2012-08-14 13:17:46

+0

我的答案是,至多(取决于你的dbms的查询编译),只有“一样好”。我认为它更具体地针对回答“我想*获得主表行的oid(s)*”。“否则,作为解决这类问题的第二种方法,“唯一”是有用的。 (例如,gabtub明确得到您的情况支票)干杯! – ruffin 2012-08-14 13:35:31