2016-03-29 5 views
0

似たようなことが以前にあった場合、私はそれほどSQLの人ではありませんので、私を許してください。私はこれを学ぶために私が何を探さなければならないのかも分かりません。私は一度このようなことをする必要があるので、私は頼むことを正当化できると思った。私のJAVAアプリケーションのSQLクエリを支援する

オンラインデータベースと話す必要がある最初のアンドロイドアプリケーションの1つを書いています。私のアプリケーションでうまくいくいくつかのSQLクエリを作成しましたが、これは私の基本知識では少し複雑です。

以下は、私が少なくともSQLの基本知識を持つ人が理解できると感じるもののサンプルを提供しました。私は、何らかの魂がクエリを傷つけるのを助けることができるか、私に何をする必要があるかについて少し洞察を与えることができるかどうか疑問に思います。前もって感謝します!

擬似サンプル:ここ

SELECT * 
FROM events 
WHERE user_has_event.user_user_id = user.user_id AND user_has_event.attendance = 1 OR 2 
JOIN attendance 

は(ユーザテーブルがなければ)私のテーブルの基本的な視覚的である:ここでは

Event Table       User_has_event Table 
----------------------------------- --------------------------------------- 
|event_id|event_name|event_society| |user_user_id|event_event_id|attendance| 
----------------------------------- --------------------------------------- 
|  |   |    | |   |    |   | 

は私の望ましい結果である:

Outcome Table 
---------------------------------------------- 
|event_id|event_name|event_society|attendance| 
---------------------------------------------- 
|  |   |    |   | 

答えて

1

SQLの知識が塩基性であるので、それは結局のところ、私は、少し(井戸を拡大します、かなりたくさんの)Andyの答えに。まず、t1t2は必須ではありませんが、便利です。テーブルを直接参照することができ、フィールド名が一意である必要はありません。あなたはこれを行うことができます:

ご覧のとおり、それはむしろ長続きして面倒です。だから、最初にテーブルを参照するときに、Andyが行ったように省略形ですぐにそれをたどることができます。そして実際には、それは一般にベストプラクティスとみなされます。

すべてのフィールド名がSELECTステートメントでアクセスされるテーブル内で一意であるため、これを回避することができます。これはしばしば真実ではないので、曖昧な参照を見逃すのは簡単すぎるので、それは良い考えではありません。アンディはそれを行う最善の方法です。 Table.Field構文を使用してテーブルを参照できるかどうか分からなかったため、異なるフィールド名を使用するようになった可能性があります。同じフィールド名を使用することがしばしば明確になります。これについて異なる人が違って感じる。私は一般に各テーブルの主キーに "ID"を使用します。これは、フィールドを参照するためにTable.Fieldを使用して、あいまいさを解決できるため機能します。

これは、次に知っておくと分かります。これは、出力に必要なフィールド名をASキーワードで割り当てることができるということです。今

Event 
    ID 
    Name 
    Society 

UserEvent 
    ID 
    EventID 
    Attendance 

、これを見て:私は、このようにあなたのフィールドの名前を変更すると仮定し

SELECT 
e.ID AS 'Event ID', 
e.Name AS 'Event Name', 
e.Society AS 'Event Society', 
ue.Attendance 
FROM 
Events e 
INNER JOIN UserEvent ue ON e.ID = ue.EventID 

は今、あなたは結果のフィールドの名前から選択したフィールドの名前を切り離されている、そのあなたの頭痛を軽減するはずです。重要な原則は、データを格納する方法とデータ出力を書式設定する方法を疎結合することです。フィールドの名前をどのように指定するかを決めるために、出力データをどのように見たいかを考慮する必要はないので、このことを知る必要があります。

ここでは、おそらくユーザーテーブルも持っているとしましょう。のは(それはおそらくない)、それは次のようになりましょう:

User 
    ID 
    FirstName 
    LastName 
    OtherStuff 

今、私たちは、ユーザテーブルへの外部キーが含まれるように、このようにこのUserEventテーブルを変更します:

UserEvent 
    ID 
    EventID 
    UserID 
    Attendance 

、これを見ています。WHERE句を除いて、

SELECT 
e.Name AS 'Event Name', 
e.Society AS 'Event Society', 
u.LastName + ', ' + u.FirstName AS 'User Name', 
ue.Attendance 
FROM 
Events e 
JOIN UserEvent ue ON e.ID = ue.EventID 
JOIN User u ON u.ID = ue.UserID 

これはあなたに基礎を与える必要が、あなたはおそらく自分で拾うことができたの基本は(のようにWHERE句についての質問をお気軽によく)。

片側の注記:JOINは、2つのセットの交差を表す最も一般的な結合タイプのINNER JOINと同じです。 LEFT、RIGHT、および(時には)OUTER結合もあります。私は一般的に、INNER JOINではなくJOINというだけです。再び、異なる人々はこれについて異なって感じる。ここでは一貫性が最も重要な原則です。

+0

これは非常に印象的な答えです!私はちょうど今それを探しています。これまで成功して、user_idに基づいて結果を表示しようとしました。 – kmil

+0

パーフェクト、間違った場所にwhere句を置いていたことが判明しました。これを適切に実装して回答を受け入れます。これにあなたの時間を費やしてくれてありがとう、それは非常に便利でした! – kmil

+0

大歓迎です。 WHERE節が自分でソートされているのでうれしいです。 – BobRodes

1

あなたは同様USERテーブルに追加することができます...が、基本的な出力のためにあなたが見る要求し、次の

SELECT 
t1.event_id, 
t1.event_name, 
t1.event_society, 
t2.attendance 
FROM 
events t1 
INNER JOIN user_has_event t2 ON t1.event_id = t2.event_event_id 
関連する問題