0

tblSettingsLookup と tblFirm の 2 つのテーブルがあります。ルックアップテーブルには 5 つの設定があります。これは基本的に、設定名を動的に更新するために使用されます。たとえば、5 つの設定がある場合、各企業はあるページで 5 つの設定を見ることができます。新しい設定を追加すると、すべての企業が 6 つの設定を見ることになります。

tblSettingsLookup からすべての設定を取得するページがあり、ユーザーはチェックボックスを介してアプリケーションの Web ページからこれらの設定を選択し、データベースに保存できます。これらのユーザー設定は別のテーブル tblusersettingsforfirms に保存されます

tblusersettingsforfirm には settingIDFK、firmIDFK、およびその他の列があります tblSettingsLookup には settingID があり、設定名 tblFirm には FirmID があります

実際に行う必要があるのは、tblSettingsLookup からのすべてのレコードと、firmID に基づく会社のすべてのユーザー設定を返す 1 つのクエリが必要なことです。

左外部結合を試しましたが、希望はありません。クロス結合は必要ありません

結果は次のようになります。

firmid settingname      
1      add user
1      delete user
1      save user
2      add user
2      save user
2      delete user 
4

3 に答える 3

1

必要なのは、クロス結合と左結合です。

select f.FirmID, l.settingname, u.settingIDFK
from
  tblFirm as f
  cross join tblSettingsLookup as l
  left join tblusersettingsforfirms u
    on u.settingIDFK = l.settingID and u.firmIDFK = f.FirmID

u.settingIDFKユーザー設定がない場合、返される値はnullになります。そのテーブルから他の値を返したい場合があります。

結果の例:

firmID  settingname  settingIDFK
1       add user     42
1       delete user  null
1       save user    76
2       add user     14
2       save user    null
2       delete user  null

特定の会社のデータを除外するには、where句を追加するだけです。例:

select f.FirmID, l.settingname, u.settingIDFK
from
  tblFirm as f
  cross join tblSettingsLookup as l
  left join tblusersettingsforfirms u
    on u.settingIDFK = l.settingID and u.firmIDFK = f.FirmID
where f.firmID = 15
于 2012-04-09T17:59:24.000 に答える
0

このようなものをお探しですか?

    SELECT `tblFirm`.`firmid`, `tblusersettingsforfirm`.`settingname`  
    FROM `tblFirm`, `tblusersettingsforfirm`
    WHERE (`tblFirm`.`firmid` =  
    `tblusersettingsforfirm`.`firmIDFK`)
于 2012-04-09T17:42:12.227 に答える
0

あなたの説明はそれほど明確ではありませんが (予想される出力と共に結合したい 2 つのテーブルのデータを表示するのに役立ちます)、企業の各設定レコードの 1 つのインスタンスを単に表示したいように思えます。実際、これはクロス結合 (またはデカルト積) です。

 SELECT tblFirm.FirmID, tblSettingsLookup.setting_name
   FROM tblFirm, tblSettingsLookup
于 2012-04-09T17:49:52.893 に答える