3

このようなテーブルがあり(さらに多くのエントリを除く)、taxstatuscode=Paidおよびtaxpaidtoname=NOであるすべてのエントリからboatuidを取得する必要があります。しかし、私はそれを機能させることができません。

テーブル:

boatuid    slug              fieldValue
20         taxstatuscode     Paid
20         taxpaidtoname     NO
24         taxstatuscode     Paid
24         taxpaidtoname     SE
25         taxstatuscode     Not Paid
25         taxpaidtoname     N/A

クエリ:

SELECT a.boatuid
FROM tx_gcnwnxmlparser_boats_specs
LEFT JOIN tx_gcnwnxmlparser_boats_specs a ON (a.slug = "taxstatuscode")
LEFT JOIN tx_gcnwnxmlparser_boats_specs b ON (b.slug = "taxpaidtoname")
WHERE a.boatuid IN(20,24,25)
AND a.fieldValue = "Paid" 
AND b.fieldValue = "NO"
GROUP BY a.boatuid

今のところ、20を返す必要があるときにIN()にあるすべてのboatuidを返します。私はEAVにまったく慣れておらず、参加しているので、何を間違えたのでしょうか。

4

2 に答える 2

1

EAVを使用する際の重要な点の1つは、「エンティティID」を使用して参加し、選択した属性が同じエンティティに属するようにすることです。

SELECT a.boatuid
    FROM tx_gcnwnxmlparser_boats_specs a
        INNER JOIN tx_gcnwnxmlparser_boats_specs b 
            ON a.boatuid = b.boatuid /* "Entity ID" join condition */
                AND b.slug = 'taxpaidtoname'
    WHERE a.boatuid IN (20,24,25)
        AND a.slug = 'taxstatuscode'
        AND a.fieldValue = 'Paid'
        AND b.fieldValue = 'NO';
于 2012-08-29T13:34:12.413 に答える
0

左結合は、内部結合「TABLEA、TABLEB」または「TABLEAINNER JOIN TABLEB」を探していると思われる条件に関係なく、左テーブルからすべての行を返します。

TABLE_A LJ TABLE_B

戻り値:

TABLE_A row 1 | TABLE_B row  (which meets condtion)
TABLE_A row 1 | TABLE_B row  (which meets condtion)
TABLE_A row 1 | TABLE_B row  (which meets condtion)
TABLE_A row 2 | TABLE_B row  (which meets condtion)
TABLE_A row 2 | TABLE_B row  (which meets condtion) 
TABLE_A row 2 | TABLE_B row  (which meets condtion)
.
.
.
TABLE_A last row | TABLE_B row  (which meets condtion)
于 2012-08-29T13:27:56.100 に答える