SQL "In" 语句返回 6 条记录...整体 SQL 语句返回 22 条记录



我正在用PHP动态生成以下SQL语句,并且我对它返回的记录有问题。位于中间的"IN"语句包含逗号分隔值的大列表,为特定islandID返回6条记录。然而,运行整个语句时生成的最终结果为上面提到的相同islandID提供了22条记录…任何帮助都是感激的。如果需要,我可以提供更多的信息。

SELECT islandID AS parentIslandID, islandName, island.longDesc,
imageLocation, COUNT(resortID) AS totalResorts, resort.resortID
FROM island, images, resort
WHERE parentIslandID = island.islandID
&& parentObjectID = island.islandID
&& imageType = 1
&& island.islandID IN (
    SELECT parentIslandID FROM resort WHERE resortID IN (
        59,62,65,69,71,72,74,75,76,82,86,89,91,93,95,105,
        106,116,117,118,120,121,122,123,124,125,126,127,
        131,145,146,150,157,159,160,167,170,174,176,185,188,189,193,
        194,198,199,200,203,205,213,217
    )
)
&& (search_Inclusive = '-1' || search_Inclusive = '0')
&& (search_onBeach = '-1' || search_onBeach = '0')
&& (search_wedCoord = '-1' || search_wedCoord = '0')
&& (search_roomRate >= '0' && search_roomRate <= '1000')
&& (search_HotelSuite = '-1' || search_VillaCondo = '-1')
&& (passportReq = '-1' || passportReq = '0')
&& (wideAccept = '-1' || wideAccept = '0')
&& (daysSearchable <= '3')
&& (search_airportDist <= '6')
&& resort.active = '-1'
GROUP BY resort.parentIslandID
ORDER BY totalResorts DESC

新想法:我对另一个表的"IN"操作做了几乎相同的事情。唯一的区别是所述表包含我在"in"语句中使用的islandID。因此,我计划在DBMS中创建一个视图来合并两个表,以获得islandID并以这种方式使用它。对此有什么想法吗?

我猜您正在连接3个表(island, images, resort),而resorts/images是多对一关系?

对于一个特定的IslandID,如你所说,你有6个度假村。但是,如果每个度假村有3张图片,则总共返回18行,每个岛屿/度假村组合3行。

如上所述,在不查看数据库的情况下很难回答这个问题。我可以看到的另一种可能是,您没有按所选择的所有列进行分组。在oracle中,这将导致一个错误,查询将无法运行。

我不确定php中发生了什么,但至少根据这个链接

http://www.w3schools.com/sql/sql_groupby.asp

这可能是你正在经历的事情。尝试添加所有非聚合函数的其他列,即

islandName岛。longDesc, imageLocation, resort.resortID

在不了解DBMS的情况下,很难回答这个问题。

resort表允许parentIslandID列为空吗?

如果是这样,这可能会混淆你的子查询,因为它引入了第三个结果(即从TRUE/FALSE到TRUE/FALSE/UNKNOWN)。

要解决这个问题,有两个选项:

a)修改表的模式,不允许parentIslandID列为空,并提供一个默认值(首选)b)用coalesce/isnull(语法取决于你的DBMS)修改你的查询:

[...]    
island.islandID IN (
SELECT coalesce(parentIslandID,-1) FROM resort WHERE [...]

供您进一步参考,再次取决于您的DBMS: http://msdn.microsoft.com/en-us/library/ms191504.aspx

最新更新