I never thought I'd be asking an SQL question here. However today is the day!
Say I have a table with numeric columns A, B populated as follows. We can think of column A being a foreign key to a parent table, and column A and B together being the primary key of its child table:
A B 1 1 1 2 2 1 2 2 3 1 3 2
I would like a SQL Select to return all records after, for example, (2, 1). I.e. (2, 2), (3, 1), and (3, 2).
Obviously the following won't work (it won't return (3, 1)):
select A, B from mytable when A > 2 and B > 1
I wish there were a way to write "A > 2 and B > 1" in a way that indicates B is "is a breakdown" of A, for lack of a better way to express it.
Of course I could create a derived column with the two numbers concatenated together, padded with enough zeros to accomodate maximum number size. Something like:
A B AandB 1 1 0101 1 2 0102 2 1 0201 2 2 0202 3 1 0301 3 2 0302
... Then I could write the SQL I want as:
select A, B from mytable when AandB > '0201'
However it would be wonderful if I could write a Where clause operating on the original numbers.
Maybe it would have been best to avoid multiple numeric columns making up a child table's key, although I'm not sure avoiding such would always eliminate the need for what I'm asking about.
This has been a tough one to Google search for solutions to. Thoughts and ideas are welcome!
Request clarification before answering.
If your know the number range of your columns, then perhaps just multiply the first one by for example 10000 and then filter n that one.
Something like:
select A, B from mytable where A*10000+B > 20001
Of course only works if you don't run into a numeric overflow, and the array solution already mentioned is elegant. I'm just wondering how both solutions compare on the performance level for large tables
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
| User | Count |
|---|---|
| 10 | |
| 5 | |
| 5 | |
| 5 | |
| 5 | |
| 2 | |
| 2 | |
| 2 | |
| 1 | |
| 1 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.