2016-09-01 8 views
0

私は、データベース内のすべてのユーザーの一覧を取得しようとしているが、私は次のクエリを実行すると取得します私は同じユーザーの複数の値を持っているので、それは大丈夫ですが)、私は小文字だけに興味があります。SQLは、(場合で異なっている)重複のない値を

+------------------------------------------------------------------+ 
|  username  | displayname  | group | email | 
+------------------------------------------------------------------+ 
| firstname.lastname | Firstname Lastname | zz group | [email protected] | 
| Firstname.Lastname | Firstname Lastname | zz group | [email protected] | 
+------------------------------------------------------------------+ 

私は、これらのユーザーの1(好ましくは最初のものを)したいので、私は次のSQLクエリを試してみました:

SELECT t.user_name, cu.display_name, cm.lower_parent_name, 
cu.email_address 
FROM (
SELECT cu.user_name 
FROM cwd_user AS cu 
INNER JOIN cwd_membership AS cm ON cu.directory_id=cm.directory_id 
AND cu.lower_user_name=cm.lower_child_name 
AND cm.membership_type='GROUP_USER' 
WHERE cm.lower_parent_name LIKE 'zz%' 
GROUP BY LOWER(cu.user_name)) u JOIN cwd_user t ON t.user_name = 
u.user_name ORDER BY t.user_name; 

が、運を持ちます。私のSQLはそれほど素晴らしいものではないので、私はここで立ち往生しています。

どのような考えですか?

答えて

0

私は、トリックを行うbashスクリプトで2つの別個のクエリを作成しました。

1

あなたが副選択で適切な値を選択して、適切なエイリアスを参照してください、あなたは下

SELECT distinct 
     t.user_name 
     , u.display_name 
     , u.lower_parent_name 
     , u.email_address 
FROM (
    SELECT 
     cu.user_name 
     , cu.display_name 
     , cm.lower_parent_name 
     , cu.email_address 
    FROM cwd_user AS cu 
    INNER JOIN cwd_membership AS cm ON cu.directory_id=cm.directory_id 
       AND cu.lower_user_name=cm.lower_child_name 
       AND cm.membership_type='GROUP_USER' 
    WHERE cm.lower_parent_name LIKE 'zz%' 
) u 
JOIN cwd_user t ON t.user_name = u.user_name 
ORDER BY t.user_name; 

によって区別できないグループを使用する必要がありますし、あなただけの小文字のuser_nameが必要な場合は、バイナリの下

を試すことができますsould
SELECT distinct 
     t.user_name 
     , u.display_name 
     , u.lower_parent_name 
     , u.email_address 
FROM (
    SELECT 
     cu.user_name 
     , cu.display_name 
     , cm.lower_parent_name 
     , cu.email_address 
    FROM cwd_user AS cu 
    INNER JOIN cwd_membership AS cm ON cu.directory_id=cm.directory_id 
       AND cu.lower_user_name=cm.lower_child_name 
       AND cm.membership_type='GROUP_USER' 
    WHERE cm.lower_parent_name LIKE 'zz%' 
    AND BINARY cu.user_name = lower(cu.user_name) 
) u 
JOIN cwd_user t ON t.user_name = u.user_name 
ORDER BY t.user_name; 
+0

残念ながら、これは(あなたと同じように)他の列も見ているように、重複したユーザー名を返します。 – MMast

+0

@Mastあなたはt.user_nameだけを必要としますか? – scaisEdge

+0

はい。これは、この – MMast

0
SELECT distinct (t.user_name), cu.display_name, cm.lower_parent_name, 
cu.email_address 
FROM (
SELECT cu.user_name 
FROM cwd_user AS cu 
INNER JOIN cwd_membership AS cm ON cu.directory_id=cm.directory_id 
AND cu.lower_user_name=cm.lower_child_name 
AND cm.membership_type='GROUP_USER' 
WHERE cm.lower_parent_name LIKE 'zz%' 
GROUP BY LOWER(cu.user_name)) u JOIN cwd_user t ON t.user_name = 
u.user_name ORDER BY t.user_name; 

SQL Serverでは、DISTINCTキーワードは異なるデータのみを抽出します。

関連する問題