2010-06-24 30 views
6

大家好!如何忽略在postgresql中选择不同的列?

我有一个SQL(见上文),我想知道我可以确保我没有得到有关唯一的名字双打。如果姓名出现在第一个选择它是主人,并应在以下选择中被忽略。

"SELECT name, id, 'place' AS tablename FROM places WHERE lower(name) LIKE '".strtolower($needle)."%'" 
    ."UNION SELECT name, id, 'community' AS tablename FROM communities WHERE lower(name) LIKE '".strtolower($needle)."%'" 
    ."UNION SELECT name, id, 'district' AS tablename FROM districts WHERE lower(name) LIKE '".strtolower($needle)."%'" 
    ."UNION SELECT name, id, 'region' AS tablename FROM regions WHERE lower(name) LIKE '".strtolower($needle)."%'" 
    ."UNION SELECT name, id, 'province' AS tablename FROM provinces WHERE lower(name) LIKE '".strtolower($needle)."%'" 
    ."ORDER BY name LIMIT 10" 

这是我的SQL。

做ü需要更多的信息?

感谢

+0

SQL注入警报! – 2010-06-24 16:36:36

+0

它只是用来测试它是如何工作的,接下来是安全性;-) – helle 2010-06-24 16:38:05

+1

你能告诉我注入的地方吗?我现在在安全步骤;-) – helle 2010-06-24 16:52:43

回答

5

DISTINCT

SELECT DISTINCT ON (name) name, id, tablename 
FROM (
    SELECT name, id, 'place' AS ... 
    UNION ... 
    UNION ... 
    UNION ... 
    UNION ...) AS subQuery 
ORDER BY name LIMIT 10 

只要指定只做对name不同使用查询作为一个子查询。

执行限制和订购过程中不同,否则不同,这可能抛弃易受骗的人,而不是放弃整整10行的正确排序顺序。

+0

如果我将它添加到每个选择,不同的表格选择disticnt,但在工会我有双打。 – helle 2010-06-24 16:39:46

+0

哎呀,错过了。尝试新编辑的查询。 – 2010-06-24 16:40:43

+0

谢谢...但根本不起作用:-( 我必须使用子查询的别名...选择独特... FROM(...)AS subqueryname ORDER ... 现在它作品 – helle 2010-06-24 16:47:33