选择始终满足指定条件的实体的所有记录

时间:2015-11-05 12:43:53

标签: sql sql-server sql-server-2008 sql-server-2012

我在SQL Server中有这样的表:

$args = array(
    'meta_query' => array(
        'relation' => 'OR'
        array(
            'key'   => 'property-price', 
            'value' => $propertyPrice,
        ),
       array(
            'key' => 'property-region',
            'value' => array('value1', 'value2'),
            'compare' => 'IN'
        )
    )
);

如果所有记录都满足以下条件,我需要编写一个仅包含Name / ID记录的查询: StartDate不是在2005年之后 EndDate不能在2005之前。

因此查询结果如下:

\\<\\?xml(.+?)\\?\\>

以下是我的查询,它错误地为Lord和Lee返回了三条记录:

String extractXml(InputStream in) {
    // IOUtils is a util class from commons-io
    String xml = IOUtils.toString(new XmlStreamReader(in));
    xml=xml.replaceAll("\\<\\?xml(.+?)\\?\\>", "").trim();
    return xml
}

3 个答案:

答案 0 :(得分:0)

WHERE条款?

SELECT Name, ID, StartDate, EndDate
FROM MyTable
WHERE StartDate <= '2005-01-01' AND Enddate >= '2005-01-01'

答案 1 :(得分:0)

SELECT Name, ID, StartDate, EndDate
FROM Table
WHERE StartDate <= 2005 
AND Enddate >= 2005

无需子查询。我假设StartDate和EndDate列是int。只有它们是日期时才需要使用YEAR()函数。在你的问题中,你所说的不应该返回的三个结果的顶行和底行确实符合标准。

答案 2 :(得分:0)

如果正确理解,如果该用户至少有1个错误条目,则根本不想为用户选择行。为此,您可以在以下内容中使用NOT IN

<强> QUERY

SELECT Name, ID, StartDate, EndDate
FROM #FortuneCompany fc
WHERE Name NOT IN(
        SELECT Name
        FROM #FortuneCompany fc
        WHERE StartDate > 2005 
        OR Enddate < 2005)

示例数据

CREATE TABLE #FortuneCompany
(
   Name NVARCHAR(40),
   ID INT,
   StartDate INT,
   EndDate INT
)
INSERT INTO #FortuneCompany VALUES
('James',232, 2005, 2015),
('James',232, 2001, 2006),
('Joe'  ,600, 1982, 2005),
('Lord' ,608, 2003, 2005),
('Lord' ,608, 2006, 2012),
('Lord' ,608, 1999, 2004),
('Lee'  ,122, 2001, 2003),
('Lee'  ,122, 2002, 2006)

<强>输出

Name    ID  StartDate   EndDate
James   232 2005        2015
James   232 2001        2006
Joe     600 1982        2005