根据另一个表中的引用值从一个表中选择值

时间:2014-07-10 17:09:36

标签: sql sqlite

我的SQLite数据库中有两个表(虚拟名称):

表1: FileID F_Property1 F_Property2 ...
表2: PointID ForeignKey(fileid)P_Property1 P_Property2 ...

Table2中的条目都有一个引用Table1中的条目的外键列。

我现在想要从Table2中选择条目,例如F_Property1中引用文件的Table1具有特定值。

我尝试了一些天真的东西:

select * from Table2 where fileid=(select FileID from Table1 where F_Property1 > 1)

现在这实际上是有效的。它从Table1中选择正确的文件ID,并使用此ID返回Table2的条目。但它只使用第一个返回的ID。我需要做的是基本上通过OR连接内部选择的返回ID,以便返回所有ID的数据。

我该怎么做?我认为它是某种类似的交叉表查询,就像这里提到的那样What is the proper syntax for a cross-table SQL query?但是这些答案不包含他们实际所做的内容的解释,因此我对任何实现都很感兴趣。 他们正在使用JOIN语句,但这不会将Table1和Table2中的条目混合在一起,而只检查两个表中的匹配ID吗?至少这是我理解这个http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

的方式

正如你可能已经从风格中注意到的那样,我对使用数据库非常陌生,所以请原谅我,如果没有一切都清楚我想要什么。请留下评论,如果有必要,我会尝试改进这个问题。

3 个答案:

答案 0 :(得分:3)

加入工作的方式不是"混合"数据,但基于密钥组合它们。 在您的情况下(我假设表1中的关键字段是唯一的),如果您在主键字段上加入这两个表,您将最终得到table2中的所有条目以及table1中的所有相应字段。如果你这样做:

select * from table1, table2 where table1.fieldID=table2.foreignkey;

然后,如果您的关键字段设置正确,您将得到以下结果:

 PointID ForeignKey(fileid) P_Property1 P_Property2 FileID F_Property1 F_Property2

table1的字段值来自匹配的行。

现在,如果你这样做:

 select table1.* from table 1, table2 where
table1.fieldID=table2.foreignkey and F_Property1>1;

基本上会获得相同的记录集,但只显示第二个表中的列,并且只显示满足第一个表的where条件的列。 希望这会有所帮助:)

答案 1 :(得分:3)

=运算符将单个值与另一个值进行比较,因此假定子查询只返回一行。

要检查(列)值是否在一组值中,请使用IN:

SELECT *
FROM Table2
WHERE fileid IN (SELECT FileID
                 FROM Table1
                 WHERE F_Property1 > 1)

答案 2 :(得分:1)

如果我理解你的问题,这将完成工作。

Select t2.* 
from table1 t1
inner join table2 t2 on t2.id = t1.id
where t1.Prop = 'SomeValue'