5

sampleテーブルを含む sqlite DB が surveytypeありstatusます。3 つのテーブルの主キー ID はすべて、テーブル「操作」への外部キーとして設定されています。次の画像のスキーマを参照してください。

ここに画像の説明を入力

operationのテーブルには値があります

ここに画像の説明を入力

とサンプル

ここに画像の説明を入力

と状態

ここに画像の説明を入力

および調査タイプとして

ここに画像の説明を入力

必要

私が達成する必要があるのは

ここに画像の説明を入力

操作テーブルからステータス IDの情報を取得し、すべての調査タイプの特定の建物について表示します。

試した

すべてのサンプルIDとすべての調査タイプIDを取得するプログラムを介してループし、個々のステータスIDを次のように取得する方法を見つけました

for all sampleid in sample table
{
   for all statustypeid in statustype table
   {  
      select statusid from operation where sampleid = 2 and surveytypeid=1
    }
}

すべての値を含むテーブルを生成するためのSQL単一クエリによるより良いオプションはありますか

注:iosアプリ用のsqliteを使用

4

5 に答える 5

0

モデル自体については説明しませんが、1 対多のSample[1]-[*]Operationという関係があります。そのため、SQL 行のサンプルのすべての操作を照会する場合は、副選択を記述する必要があります。これは、一定量の操作が可能であり、動的であると想定している場合にのみ実行できます。

より一般的なアプローチは、サンプルエントリの重複を伴​​う関係を照会し、コードで処理することです

SELECT s.building_name, s.building_id, o.statusID 
from sample s, operation o
where s.id = o.sampleid

別の方法は、特定のステータスに対して別のクエリで操作を選択することです。

SELECT o.statusID 
operation o
where o.sampleid  = 12 
于 2013-05-29T07:47:29.553 に答える
0
For this first you have to join two tables like : Operation and Sample with SurveyType and then pivot the column 'LongName' of SurveyType. We can achieve it dynamically. 

Here is the query...



Select * FROM 
(Select Sample.BuildingName_EN AS 'Building Name', 
        Sample.BuildingID,
        SurveyType.LongName,
        Operation.StatusID 
from SurveyType
Inner Join Operation ON 
    Operation.SurveyTypeID = SurveyType.ID
Inner Join Sample ON
    Operation.SampleID = Sample.ID
    ) P
PIVOT
(
MAX(StatusID)
FOR LongName
IN ([Survey 1],[Survey 2],[New Survey 3])
) AS pvt
于 2013-05-29T16:35:38.207 に答える
0

データをピボットする必要がありますが、残念ながら mysql ではこれを動的に達成することはできません。

これを試して:

SELECT
    s.BuildingName_EN as building_name,
    s.ID building_id,
    SUM(CASE WHEN st.LongName = 'Survey1' THEN sa.ID ELSE 0 END) as Survey1,
    SUM(CASE WHEN st.LongName = 'Survey2' THEN sa.ID ELSE 0 END) as Survey2,
    SUM(CASE WHEN st.LongName = 'New Survey 3' THEN sa.ID ELSE 0 END) as 'New Survey 3'
FROM 
    Operation o
LEFT JOIN Sample s
    ON o.SampleID = s.ID 
LEFT JOIN Status sa
    ON o.StatusID = sa.ID 
LEFT JOIN SurveyType st
    ON o.SurveyTypeID = st.ID 
GROUP BY
    s.ID
于 2013-05-29T07:50:56.033 に答える