Mysql 选择条件与单行匹配的行?

Mysql 选择条件与单行匹配的行?,mysql,sql,foreign-keys,inner-join,Mysql,Sql,Foreign Keys,Inner Join,我有两个通过外键连接的表。在表A中,我试图获取时间列中的数据大于或等于表B开始列以及时间列中的数据小于或等于表B结束列的所有行。我在想,内部连接可能会起作用,但是,结果并不是我所期望的。它正在返回一些数据,但它们正在重复自己 以下是我所拥有的: SELECT * FROM columnA INNER JOIN columnB ON columnA.time >= columnB.start OR columnA.time <= columnB.stop 我看错了吗?内部联接是收集这

我有两个通过外键连接的表。在表A中,我试图获取时间列中的数据大于或等于表B开始列以及时间列中的数据小于或等于表B结束列的所有行。我在想,内部连接可能会起作用,但是,结果并不是我所期望的。它正在返回一些数据,但它们正在重复自己

以下是我所拥有的:

SELECT * FROM columnA
INNER JOIN columnB
ON columnA.time >= columnB.start
OR columnA.time <= columnB.stop
我看错了吗?内部联接是收集这些数据的正确方法吗

更新:

实际上,tableA的外键连接到tableB上的主键。不管怎样,我做到了:

SELECT * FROM tableA
INNER JOIN tableB
ON tableA.time >= tableB.start
AND tableA.time <= tableB.stop

我没有像你那样做的原因是因为数据已经在数据库中保存了几年了,而我最近刚刚添加了带有外键的列。所以该列中还没有任何数据。这就是我查询它的原因,这样我就可以知道哪些列要用这些信息更新。它将数据返回给我,但也返回了其他不符合要求的数据。

您必须使用定义其关系的columnName连接它们,并将条件放在WHERE子句上。不在条款上


您需要使用外键进行加入,然后筛选出与您的条件不匹配的结果

Select * from TableA
Inner join TableB on TableA.Key = TableB.Key
Where TableA.time >= TableB.Start
Or TableA.time <= TableB.Stop
通常,我总是把W3Schools的sql页面放在手边。这是SQL函数的最佳快速参考,我可能已经忘记了,需要快速复习。也是一个学习的好地方。

从你的问题

SELECT a.* 
FROM columnA a 
INNER JOIN columnB b ON a.joiningColumn = b.joiningColumn
WHERE a.time >= b.start
OR a.time <= b.stop
where the data in the time column is greater than or equal to the table B start column  
  AND  
where the data in the time column is less than or equal to the table b end column
然而你的问题已经

columnA.time >= columnB.start  
  OR  
columnA.time <= columnB.stop  
结合其他人的说明,关于使用外键加入

SELECT
  *
FROM
  TableA
INNER JOIN
  TableB
    ON  TableA.PK    = TableB.FK
    AND TableA.time >= TableB.start
    AND TableA.time <= TableB.stop 

我通过添加一个WHERE将其与我要查找的确切行中的数据相匹配,设法找到了解决方案。以下是我的解决方案:

SELECT * FROM tableA
INNER JOIN tableB
ON tableA.timetag >= tableB.start
AND tableA.timetag <= tableB.stop
WHERE tableB.id = "1"

@JohnWoo我必须指出,该链接的勘误表中没有一个引用任何W3C学校的SQL内容……我无法与他们的任何其他教程交谈,尽管我确实记得他们的SQL内容中有一些不准确之处。然而,这只是极少数,如果你把头放在水龙头上,让F1钥匙成为你最好的朋友之一,那将弊大于利。没有必要将时间条件移动到where子句。问题是OR。你是说使用AND确实有帮助,还是没有帮助?如果它没有帮助,你能发布一些样本数据来说明哪里出了问题,以及你想要/期望的结果吗?它有帮助,事实上,现在我想起来了,我问的问题是错的。表B第一行有开始和停止时间。我想做的是选择tableA中大于或等于第一行开始时间的时间,小于或等于同一行停止时间的数据。对不起,我不知道我的问题是怎么写的。
SELECT * FROM tableA
INNER JOIN tableB
ON tableA.timetag >= tableB.start
AND tableA.timetag <= tableB.stop
WHERE tableB.id = "1"