SQL查询中的问题

时间:2011-08-31 11:28:42

标签: mysql sql sql-server sql-server-2005 sql-server-2008

我的SQL查询中存在很大问题,我不知道如何决定它。 所以,我有查询:

SELECT * FROM table1 WHERE leftBorder <= 10 AND rightBorder >= 100

没关系。

下一步。

SELECT * FROM table1 WHERE 
(leftBorder <= 10 AND rightBorder >= 100) OR (leftBorder <= 200 AND rightBorder >= 500)

没关系。

但是,我想从查询中获取左右边框的值,所以:

SELECT * FROM table1 WHERE 
???
(SELECT leftBorder, rightBorder FROM table2 WHERE id in (1,2,3,4,5))

我需要在查询中为查询创建多条件...是否可能? 我没有程序,只是查询。

我试着解释一下:

SELECT TOP 1 leftBorder, rightBorder FROM table2 WHERE id in (1,2,3,4,5)

这给我带了leftBorder和rightBorder的1行,我可以在查询中使用它,如:

SELECT * FROM table1 WHERE 
table1.leftBorder <= table2.leftBorder AND table1.rightBorder >= table2.rightBorder 
(SELECT TOP 1 leftBorder, rightBorder FROM table2 WHERE id in (1,2,3,4,5)) as table2

BUT!它只是当我从查询返回1行时。但是我应该怎么做,如果我有10行作为回报,我必须生成10个条件的查询?我能在查询中做到吗?

3 个答案:

答案 0 :(得分:0)

您可以在子查询中选择值,您可以选择以下几种方法:

SELECT * FROM table1 
WHERE l leftBorder <= (SELECT leftBorder FROM table2 WHERE id IN(1,2,3,4,5)

或者你可以从子查询中的表中选择并使用这样的别名:

SELECT * FROM table1,  
    (SELECT leftBorder FROM table2 WHERE id IN(1,2,3,4,5) as temp 
WHERE leftBorder<= temp.leftBorder

取决于您想要达到的目标和DBS的功能

答案 1 :(得分:0)

如果我理解你的问题,我想你需要的是这样的:

SELECT
    DISTINCT t1.*
FROM
    table1 t1
JOIN
    table2 t2 
    ON (
        t1.leftBorder <= t2.leftBorder
        AND t1.rightBorder >= t2.rightBorder
        AND t2.id IN (1,2,3,4,5)
    )

答案 2 :(得分:0)

您可以使用EXISTS条件执行此操作:

  SELECT * 
  FROM table1 
  WHERE EXISTS
    (SELECT * 
        FROM table2 
        WHERE table2.leftBorder>=table1.leftBorder 
        and table2.rightBorder<=table1.rightBorder)