0

これが基本的な質問である場合は申し訳ありません。私はSQLにかなり慣れていないので、検索する概念の名前が欠けているだけだと思います。

簡単な概要。

最初のテーブル (項目):

ID     | name
-------------
1      | abc
2      | def
3      | ghi
4      | jkl

2 番目のテーブル (ペア):

ID     | FirstMember   | SecondMember         Virtual column (pair name)
-------------------------------------
1      | 2             | 3                    defghi
2      | 1             | 4                    abcjkl

2 番目のテーブルに示されている仮想列を構築しようとしています。2 番目のテーブルに任意のエントリが作成されたときに構築できますが、そのようにすると、項目の 1 つがいつでもその列のデータに誤りが発生します。最初のテーブルの名前が変更されます。

また、必要なときにいつでもその列を作成できることも理解しています (単純な要求またはストアド プロシージャのいずれか)。

通常の列としてアクセスできる「仮想」列を定義する方法はありますが、その内容は動的に構築されますか?

ありがとう。

編集: これは MsSql 2008 にありますが、エンジンに依存しないソリューションが推奨されます。

編集: 上記の例は、複数の点で単純化されすぎています。主要なものは、仮想列の内容が両方の名前を直接連結したものではなく、説明していない列の内容によっては、より複雑なものであるということです。それでも、あなたは有望と思われる複数のパスを提供しました - 私は戻ってきます. ありがとう。

4

4 に答える 4

4

items テーブルを 2 回結合する必要があります。

select p.id,
       p.firstMember,
       p.secondMember,
       i1.name||i2.name as pair_name
from pairs as p
  join items as i1 on p.FirstMember = i1.id
  join items as i2 on p.SecondMember = i2.id;

次に、これをビューに入れると、「仮想列」ができます。列pairsが必要な場合は、実際のテーブルではなくビューをクエリするだけです。pair_name

上記は内部結合を使用していることに注意してください。「FirstMember」列と「SecondMember」列が null である可能性がある場合は、代わりに外部結合を使用することをお勧めします。

于 2013-07-30T13:54:14.243 に答える
2

a_horse_with_no_name が指定されたものなど、クエリ結果からテーブルのようなオブジェクトを作成するビューを使用できます。

CREATE VIEW pair_names AS
SELECT p.id,
    p.firstMember,
    p.secondMember,
    CONCAT(i1.name, i2.name) AS pair_name
FROM pairs AS p
    JOIN items AS i1 ON p.FirstMember = i1.id
    JOIN items AS i2 ON p.SecondMember = i2.id;

次に、結果を照会するには、次のようにします。

SELECT id, pair_name FROM pair_names;
于 2013-07-30T13:57:53.323 に答える
0

必要に応じて、次のように「仮想列」のビューを作成できます。

CREATE VIEW aView AS

SELECT
    p.ID,
    p.FirstMember,
    p.SecondMember,
    a.name + b.name as 'PairName'
FROM
    pairs p
LEFT JOIN
    items a
ON
    p.FirstMember = a.ID
LEFT JOIN
    items b
ON
    p.SecondMember = b.ID

編集:

または、もちろん、毎回同様の select ステートメントを使用することもできます。

于 2013-07-30T14:00:49.777 に答える
0

テーブルから選択する場合、AS を使用して列の結果に名前を付けることができます。

SELECT st.ID, st.FirstMember, st.SecondMember, ft1.Name + ft2.Name AS PairName
FROM Second_Table st 
JOIN First_Table ft1 ON st.FirstMember = ft1.ID
JOIN First_Table ft2 ON st.SecondMember = ft2.ID

あなたが求めているようなものをあなたに与えるべきです。

于 2013-07-30T14:08:02.243 に答える