12

次のクエリのビューを作成しようとしています。

SELECT DISTINCT
  products.pid        AS id,
  products.pname      AS name,
  products.p_desc     AS description,
  products.p_loc      AS location,
  products.p_uid      AS userid,
  products.isaproduct AS whatisit
FROM products
UNION
SELECT DISTINCT
  services.s_id       AS id,
  services.s_name     AS name,
  services.s_desc     AS description,
  services.s_uid      AS userid,
  services.s_location AS location,
  services.isaservice AS whatisit
FROM services

しかし、そうすることができません。MySql クエリ ブラウザを使用しています。私が得ているエラーは次のとおりです。

ビューは、SELECT コマンドのアクティブな結果セットからのみ作成できます

誰かがこれで私を助けてくれますか?

4

5 に答える 5

13
CREATE VIEW vw_product_services AS
SELECT DISTINCT products.pid AS id,
                products.pname AS name,
                products.p_desc AS description,
                products.p_loc AS location,
                products.p_uid AS userid,
                products.isaproduct AS whatisit
           FROM products
          UNION
          SELECT DISTINCT services.s_id AS id,
                services.s_name AS name,
                services.s_desc AS description,
                services.s_uid AS userid,
                services.s_location AS location,
                services.isaservice AS whatisit
           FROM services

私はこれを試してみましたが、うまくいきました!みんな、ありがとう :)

于 2009-02-05T09:34:18.467 に答える
4

2 番目の選択でユーザー ID と場所の順序を入れ替えたい場合があります。列名は、ユニオンのすべての選択で 1 対 1 で一致する必要があります。

EDIT : クエリ ブラウザの場合、これが指摘するように、「クエリからビューを作成するには、クエリを正常に実行する必要があります。より正確には、ビューは、現在実行中のクエリからではなく、最後に正常に実行されたクエリから作成されます。クエリエリア」

そのため、クエリ ブラウザでビューを作成する前に、まずクエリを実行する必要があります。

エラーは、mysql ではなくクエリ ブラウザからのものです。

于 2009-02-05T06:38:43.520 に答える
1

UNIONについて一言。UNION は、結果セットの個別の値のみを返します。したがって、SELECT DISTINCT を UNION と組み合わせて使用​​する必要はありません。おそらく、DISTINCT も使用しない方がパフォーマンスが向上します。

UNION の詳細については、こちらを参照してください: SQL UNION 演算子

于 2009-02-05T11:24:59.883 に答える
1

同じ列に結合されているさまざまなタイプがあります。(名前は異なっていてもかまいませんが、型は同じであるか、少なくとも自動キャスト可能である必要があります。) しかし、@Learning が指摘しているように、SELECT 列の列挙をねじったようです。

念のため、適切な構文(私にとってはうまくいきました)は

CREATE VIEW myView 
AS  
SELECT ... 
于 2009-02-05T06:42:46.803 に答える
0

エラーメッセージは、 mysql-gui-toolsの一部である「QueryBrowser.pas」にあります。

procedure TQueryBrowserForm.SQLCreateViewClick(Sender: TObject);
// ... 
begin
  if Assigned(ActiveResultset) and (ActiveResultset.ResultSet.query.query_type = MYX_QT_SELECT)then
    // ... 
  else
    ShowError('Creation error', _('A view can only be created from a active resultset of SELECT command.'), []);
end;

これは、a)アクティブな結果セットがないこと、およびb)クエリのタイプが間違っていることによってトリガーされます。

「DISTINCT」を削除しても違いはありますか?いずれにせよ、これは1つのMySQLではなく、QueryBrowserのバグです。回避策として、MySQLで直接ビューを作成するだけで十分です。

于 2009-02-05T08:57:55.733 に答える