Hi @chiashin,
I was going to start this by asking the same question that @AlexanderFillbrunn raised about which database you are using, as I noted that in some of your query examples you have apostrophes in it rather than double quotes around table and column identifiers, which would in itself be invalid syntax for many databases.
In terms of making the looping node work, here is an example from an Oracle database
Suppose I have a database table consisting of city information, each with a city_id, country_id and a city_name
I have a table creator, with a table consisting of two columns: cityid, countryid which are the set of ID tuples I wish to retrieve from the database table using the looping node, with the IN statement
The table creator node contains the following:

I configure the looping node as follows:
Note I have unticked “Read all”. I think you should too. (Just go with it, because I have no idea when it should be ticked as I have yet to run a query where ticking that works! Suggestions on a postcard!
)
The query I have used is this:
SELECT * FROM #table# "table"
WHERE ("CITY_ID","COUNTRY_ID") in ( ($cityid$, $countryid$) )
Note that I have double-quotes around my identifiers, rather than apostrophes
If one of my columns had been a string instead of numeric, (maybe I had it referencing COUNTRY_NAME instead of COUNTRY_ID), I would have used the following:
SELECT * FROM #table# "table"
WHERE ("CITY_ID","COUNTRY_NAME") in ( ($cityid$, $countryname$) )
(WITHOUT single quotes around the $countryname$ token).
Note that this is unusual and a little inconsistent … there is a difference between the way String tokens from the “Column List” are included in the query, and the way String flow-variables are included.
Those from the column list are NOT placed inside single quotes, even when they contain String data, but flow-variables MUST be placed in single-quotes if they are representing String values.
e.g, supposing in addition to the column list, we also had a flow variable containing a country to be excluded from the returned query:
We could write this as follows:
SELECT * FROM #table# "table"
WHERE ("CITY_ID","COUNTRY_NAME") in ( ($cityid$,$countryname$) )
and COUNTRY_NAME <> '$${Sexclude_countryname}$$'
See how one is quoted and the other isn’t.
Of course if syntactically, quotes weren’t to be added (such as if the flow-variable represented a string to be used to dynamically replace a column in the select statement) then you wouldn’t include the quotes around it, but for most everyday use cases, you would include the quotes.
This is just something you need to be aware of.