0

selectステートメントを作成しようとしています

あるテーブルから、別のテーブルで使用されているのと同じコードと等しいレコードを収集する必要があります。

より適切に言えば、クライアントはドロップダウン リストから都市とその都市のカテゴリを選択します。クライアントが [次へ] をクリックすると、そのカテゴリに該当するその都市のさまざまな場所が表示されます。しかし、どこが間違っているのかわかりません。

クライアントが都市を選択すると、都市ごとに読み取られる 2 つのレコード、適切な都市コード、および最初の文字が「bx」である私書箱コードが存在するようになりました

私の最初のクエリでは、重複を排除するために、

select c.[Description] from city c 
where c.Provincecode like 'EC' and 
      c.citycode in (select c.citycode from City c 
                     where SUBSTRING(c.citycode,0,3) not like 'bx')

それは私に1つの都市名を与えます.

ただし、クライアントがたとえば現金のみの場所を選択した場合、結果には 1 つのレコードのみが表示されます。

しかし、できる限り試してみてください。正しい構文を取得できません

私はもう試した:

select c.[Description] from city c 
where c.Provincecode like 'EC' and 
      c.citycode in (select c.citycode from City c 
                     where SUBSTRING(c.citycode,0,3) not like 'bx') 
      and exists (select * from Customers cu 
                  where cu.Category like 'SC' and cu.Province like 'EC')

しかし、それは予想以上の結果をもたらします

これは access データベースを使用して行われますが、SQL を使用してコーディングを行い、それを access に書き直しています。それは問題ではありません

誰かがSQLの答えを提供してくれれば、私はそこから残りを行うことができます

参加するべきかどうかわかりません。私は試しました

select * from 
(select c.[Description] from city c 
 where c.Provincecode like 'EC' and 
       c.citycode in (select c.citycode from City c 
                      where SUBSTRING(c.citycode,0,3) not like 'bx')) x 
join Customers on  province=city.provincecode where Category like 'SC'

しかし、マルチパート識別子をバインドできませんでしたというエラーが表示されます


編集

これが新しいクエリです

select * 
from 
    (
        select c.* 
        from city c 
        where c.Provincecode like 'EC' 
            and c.citycode in
                (
                    select c.citycode 
                    from City c 
                    where SUBSTRING(c.citycode,0,3) not like 'bx'
                )
    ) x 
    join 
    Customers  
        on  province=x.Provincecode 
where Category like 'SC'

返されるのは ここに画像の説明を入力

ご覧のとおり、C Strydom を顧客とする結果が多すぎますが、すべての都市が存在します。

この特定の例では、1 つのレコードのみを表示する必要があります。 ここに画像の説明を入力

4

2 に答える 2

0

私は SELECT * を使用するのは好きではありませんが、必要な実際の列の詳細を知っているので、それはあなたに任せます。主に特定の州コードの "City" テーブルを見ているが、"bx" で始まっていないため、クエリは単純なはずです。where句にそれを入れるだけです...他の基準でそれ自体に参加することなく、レコードに関する複数のことをテストできます。それができたら、制限しているカテゴリの顧客テーブルに単純に結合します。

select *
   from 
      city c 
         JOIN Customers CU
            on c.ProvinceCode = CU.Province
           AND CU.Category like 'SC'
   where 
          c.ProvinceCode like 'EC' 
      and NOT substr( c.CityCode,0,3 ) = 'bx'

さて、顧客ごとに複数のレコードの問題。参加しているのが顧客テーブルへの都道府県コードだけである場合、デカルトの結果が得られます...しかし、顧客のProvinceCode AND Cityに参加すると、一致する1つだけが得られます...ただし、その列の関係を確認するための顧客テーブルの詳細はありません。

于 2013-06-14T14:28:13.637 に答える