Saya memiliki tabel pelanggan di mana ada 3 kolom untuk id untuk akun yang berbeda, seperti ini:

customers: id, account1_id, account2_id, account3_id

Sekarang, saya perlu memilih id dari semua kolom itu untuk digunakan di WHERE bagian dari kueri lain, seperti ini:

SELECT * FROM balances
WHERE account_id IN (
    SELECT account1_id, account2_id, account3_id FROM customers
)

Tentu saja tidak berfungsi karena mengembalikan sesuatu seperti array 2 dimensi dan saya memerlukan array 1 dimensi. Saya mencoba menggunakan:

WHERE (`account_id`, `account_id`, `account_id`) IN (
    SELECT account1_id, account2_id, account3_id FROM customers
)

Tapi itu ANDs account_id dan saya perlu OR. Juga mencoba:

SELECT CONCAT_WS(',' account1_id, account2_id, account3_id) AS accounts FROM customers

Tetapi itu tidak berhasil juga karena saya harus mencari di dalam string yang dikembalikan.

Saya mencoba menggunakan REGEXP tetapi tidak bisa mendapatkan sintaks yang benar dengan subselect dan juga saya tidak yakin itu akan efisien.

Jadi, bagaimana cara meratakan array 2d itu menjadi 1d?

0
Forseti 11 Mei 2021, 10:52

1 menjawab

Jawaban Terbaik
SELECT balances.* 
FROM balances
JOIN customers ON balances.account_id IN ( customers.account1_id, 
                                           customers.account2_id, 
                                           customers.account3_id )

Atau sama dengan MANA ADA.

1
Akina 11 Mei 2021, 08:01