0

リレーションまたは外部キーを持たない 2 つのテーブルがあり、クエリで 2 つの列を結合したいと考えています。

 select   DISTINCT a.OdemeTuru, b.MAdi from odemeturu as a, 
 musteriler as b order by b.MID,a.OID

両方から値を取得できますが、混在しており、個別に機能していません。

結果は次のとおりです。

'Nakit', 'Ali' 'Veresiye', 'Ali' 'Kredi Kartı', 'Ali' 'Özel', 'Ali'
'Nakit', 'Ahmet' 'Veresiye', 'Ahmet' 'Kredi Kartı', 'Ahmet' 'Özel',
'Ahmet' 'Nakit', 'Cemil' 'Veresiye', 'Cemil' 'Kredi Kartı', 'Cemil'
'Özel', 'Cemil' 'Nakit', 'Furkan' 'Veresiye', 'Furkan' 'Kredi Kartı',
'Furkan' 'Özel', 'Furkan'

ただし、次のものが欲しい

'Nakit', 'Ali'
'Özel', 'Ahmet'
'Veresiye', 'Cemil'
'Kredi Kartı', 'Furkan'

クエリのどこが間違っていますか? (テーブルの行数は同じです)

編集:申し訳ありませんが、何かを忘れていました。a.tarih は存在しません

4

2 に答える 2

2

16ではなく4行を取得するために4行の2つのテーブルを相互適用することを考えることができる唯一の方法は、行番号で結合することです。

SELECT  a.OdemeTuru, b.Madi
FROM    (   SELECT  @a:= @a + 1 AS RowNumber, OID, OdemeTuru
            FROM    odemeturu,
                    (SELECT @a:= 0) AS a
            ORDER BY OID
        ) AS a
        INNER JOIN
        (   SELECT  @b:= @b + 1 AS RowNumber, MID, Madi
            FROM    musteriler,
                    (SELECT @b:= 0) AS b
            ORDER BY MID
        ) AS b
            ON a.RowNumber = b.RowNumber

odemeturu行はOIDで並べ替えられ、行はMIDで並べmusteriler替えられます。の最初の行はの最初の行odemeturuと結合され、musteriler2番目の行は2番目の行と結合されます。これはかなり恣意的ですが、あなたの基準に一致しているようです。

サブクエリの順序を変更して、結果を変更できます。


SQLフィドルの例

于 2012-06-18T16:11:04.703 に答える
0

何らかの方法で両方のテーブルを結合できる場合は、おそらく次のようにすることができます。

select   DISTINCT a.OdemeTuru, b.MAdi from odemeturu a leftjoin musteriler b 
on a.OID = b.MID order by b.MID,a.OID a.tarih 

編集:

前述のように、テーブルと MID/OID の間には何の関係もありません。可能な唯一のことは、UNIONlikeを使用してすべての異なる値を取得することです

select DISTINCT OdemeTuru from odemeturu order by a.OID,a.tarih 
UNION
select distinct MAdi from musteriler order by b.MID 
于 2012-06-18T14:01:29.567 に答える