我有两个表,我希望通过这些表与一些列进行连接,以便为我的java / hibernate应用程序提供视图。它看起来像这样:
CREATE VIEW customer_contacts AS cc
SELECT DISTINCT ON (cust.id) cust.id
cust.company
cust.zip
...
con.name
con.forename
...
FROM contacts con
LEFT JOIN customer cust ON con.customer = cust.id
ORDER BY cust.id
到目前为止一切顺利。非常简单。 如果我在视图上进行SELECT:
SELECT *
FROM cc
WHERE name ilike '%schult%'
我得到 13个结果。
如果我直接使用视图语句
进行相同的查询SELECT DISTINCT ON (cust.id) cust.id
cust.company
cust.zip
...
con.name
con.forename
...
FROM contacts con
LEFT JOIN customer cust ON con.customer = cust.id
WHERE name ilike '%schult%'
ORDER BY cust.id
我得到了 75个结果! 我发现DISTINCT破坏了结果。但为什么呢?
我怎样才能正确使用它?
答案 0 :(得分:1)
您的查询(基于视图和直接查询)具有不同的应用条件顺序:
public class OnDataPointListener : Java.Lang.Object, IOnDataPointListener, INotifyPropertyChanged
{
public void OnDataPoint(DataPoint dataPoint)
{
foreach (var field in dataPoint.DataType.Fields)
{
Value val = dataPoint.GetValue(field);
}
}
}
,然后应用%shult%
distinct on
,然后搜索distinct on
你知道%shult%
是如何运作的吗?
它选择第一行(如果没有定义适当的排序,它可能是不确定的)给定属性并留下其他属性。
例如:
我们假设我们的客户为distinct on
,其中两个关联的联系人为id=1
,另一个为name='Schultz'
。
现在基于视图的选择将应用name='Schmidt'
并选择具有某种联系的客户(第一个,在这种情况下是不确定的),然后distinct on
将被应用 - 可能会发生Schultz将被{{1}删除}。
推荐阅读:
https://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-DISTINCT