2016-10-18 35 views
0

此问题听起来可能含糊不清,但请耐心等待。如何通过搜索其子女值来定位和打印一个条目并只打印一个条目

我有几张桌子,所有涉及到的一些属性的特征,它们是:

财产:包括pty_id,郊区,属性类型和属性的其他地址的东西

功能:包括feat_id,feat_name

property_feature:连接属性,并设有

上市 S:包含类的东西的价格和性能

什么,我想要实现的可用性,通过郊区的标准,属性类型以及属性的特性来搜索属性。我现在的问题是,我不知道如何通过找到属性的一些功能。

我现在可以通过郊区搜索一种类型和一种功能。如果我想通过多个郊区或功能进行搜索,应该如何构建查询?如果使用上面的查询,我会得到任何结果

SELECT distinct P.PTY_ID, P.PTY_UNITNUM, P.PTY_STREET, P.PTY_POSTCODE, 
     P.PTY_SUBURB,P.PTY_CITY,P.P_TYPE_ID, 
     T.P_TYPE_NAME,L.SALE_PRICE, L.AVAILABILITY 
FROM PROPERTY P 
LEFT OUTER JOIN property_type T on P.P_TYPE_ID = T.P_TYPE_ID 
LEFT OUTER JOIN listings L on P.PTY_ID = L.PTY_ID 
LEFT OUTER JOIN property_feature R on R.PTY_ID= P.PTY_ID 
LEFT OUTER JOIN feature F on R.FEAT_ID= F.FEAT_ID 
WHERE REGEXP_LIKE (P.PTY_SUBURB,'Clayton') 
and f.feat_id = 43 //feature 1 
and f.feat_id = 40;//feature 2 

:我提供我的脚本让你有一个粗略的画面(虽然工作似乎有不好的做法新秀)。有任何想法吗?

请参阅本查询更多的想法:

SELECT P.PTY_ID, P.PTY_UNITNUM, P.PTY_STREET, P.PTY_POSTCODE, 
     P.PTY_SUBURB,P.PTY_CITY, T.P_TYPE_NAME, 
     L.SALE_PRICE, L.AVAILABILITY, R.PTY_ID,F.FEAT_ID, 
     R.FEAT_ID,F.FEAT_NAME 
FROM PROPERTY_TYPE T, PROPERTY P, LISTINGS L, PROPERTY_FEATURE R,FEATURE F 
WHERE P.P_TYPE_ID = T.P_TYPE_ID 
    AND P.PTY_ID = L.PTY_ID(+) 
    AND R.FEAT_ID= F.FEAT_ID(+) 
    AND R.PTY_ID= P.PTY_ID 
    AND REGEXP_LIKE (P.PTY_SUBURB,'Nunawading'); 

这是我的查询的原始结构,但它给了我重复的结果(而他们实际上是不是因为他们是与2个不同的同一条目特征)。我从查询想要的是** 2个给出了功能查询条件,我得到这个属性,它包含这些功能2 **

所以下面是从第二个查询的数据只有1项:

HERE

+2

您可以请张贴一些示例数据和所需的结果?你没有结果,因为你说同一个字段应该是= 43 AND = 40 – Aleksej

+0

Sry我对这个论坛的功能不太熟悉......不确定如何在这里打印很多截图。所以我要通过它发短信。它的样子,这个属性有2个功能,一个游泳池和一个草坪,我想搜索这个属性使用的条件,包括这些2个功能@ Aleksej – dhyy

+0

文本是发布数据的最佳方式。每个人都可以获取你的文本数据并建立一个例子,而图像是无用的这个 – Aleksej

回答

0

你在left join后有一个条件......这将它变成inner join。将条件放入连接本身(ON ...)。此外,2x可能的值需要一个OR

SELECT distinct P.PTY_ID, P.PTY_UNITNUM, P.PTY_STREET, P.PTY_POSTCODE, 
     P.PTY_SUBURB,P.PTY_CITY,P.P_TYPE_ID, 
     T.P_TYPE_NAME,L.SALE_PRICE, L.AVAILABILITY 
FROM PROPERTY P 
LEFT OUTER JOIN property_type T on P.P_TYPE_ID = T.P_TYPE_ID 
LEFT OUTER JOIN listings L on P.PTY_ID = L.PTY_ID 
LEFT OUTER JOIN property_feature R on R.PTY_ID= P.PTY_ID 
LEFT OUTER JOIN feature F on R.FEAT_ID= F.FEAT_ID 
     and (f.feat_id = 43 //feature 1 
     or f.feat_id = 40) //feature 2 
WHERE REGEXP_LIKE (P.PTY_SUBURB,'Clayton') 
; 
+0

我想这只是解决了我的问题。欢呼声(: – dhyy

+0

哎呀,我想我忽略了一些东西。查询实际上忽略了左外连接后的“和”和“或”行,并跳转到“where”条件 – dhyy