1

HeidiSQL を使用して小さなデータベースをセットアップしようとしてきましたが、問題に遭遇しました。特定の値を含む別のテーブルの列の数をカウントする特定のテーブルの列を追加したいと考えています。このようにカスタム値を入力して、デフォルト値を設定して試しました

    SELECT COUNT(LidID) AS AantalSchepen FROM SCHIP WHERE SCHIP.LidID=LID.LidID

LidID は、テーブル LID と同じ値をテーブル SCHIP に含む、行数をカウントしたい列の名前です。LidID の値はテーブル LID の主キーであるため、論理的にはテーブル SCHIP の外部キーです。

しかし、カスタムのデフォルト値フィールドにこのステートメントを入力すると、デフォルト値が無効であることが示されます。私がやっていることは完全に不可能ですか、それとも SQL ステートメントに欠陥がありますか?

編集: データベースの目的は、Web サイトの表に表示される情報のソースになることです。以前の回答で読んだように、ここでやろうとしていることは単に不可能なので、別の解決策は...?

4

2 に答える 2

0

MySQL 5.7.6 および MariaDB 5.2 以降では、テーブルに仮想列を含めることができます。MariaDB ではvirtualと呼ばれ、MySQL ではgeneratedと呼ばれます。どちらも同じ意味で、構文も非常に似ています。HeidiSQL のテーブル エディターは、このような仮想列の作成をサポートしています。作成コードの例:

CREATE TABLE table1 (
 a INT NOT NULL,
 b VARCHAR(32),
 c INT AS (a mod 10) VIRTUAL
)

残念ながら、仮想列はサブクエリをサポートしていないため、すべてがCOUNT(*)クエリに役立つわけではありません。

于 2015-12-10T09:50:39.490 に答える
0

通常、「クエリを実行する」デフォルト値を追加することはできません。これはデータベースに依存するかもしれませんが、これをサポートするデータベースは考えられません。

あなたができることは、ビューを使用してデータにアクセスすることです:

create view v_lid as
    select l.*,
           (select count(*)
            from SCHIP s
            where s.LidID = l.LidID
           ) as AantalSchepen
    from lid l;

次に、ビューにアクセスすると、これの最新の値が取得されます。

注: これは、行の作成時に値が設定される「デフォルト」値とは少し異なります。本当にそれが必要な場合は、トリガーが必要になります。または、おそらく、同じ値に到達する日付ロジックがいくつかあります。

于 2015-04-24T12:46:44.660 に答える