Hi,
I have a query like this :
SELECT
x1,
x2,
( SELECT ... FROM ... WHERE ...
UNION
SELECT ... FROM ... WHERE ...) as x3
FROM ...
WHERE ...
The problem is that I don't want to return the results where x3 is
NULL.
Writing :
SELECT
x1,
x2,
( SELECT ... FROM ... WHERE ...
UNION
SELECT ... FROM ... WHERE ...) as x3
FROM ...
WHERE ... AND x3 IS NOT NULL
doesn't work.
The only solution I found is to write :
SELECT * FROM
(
(SELECT
x1,
x2,
( SELECT ... FROM ... WHERE ...
UNION
SELECT ... FROM ... WHERE ...) as x3
FROM ...
WHERE ...
) AS R1
)
WHERE R1.x3 IS NOT NULL
Is there a better solution? Can I use an EXISTS clause somewhere to
test if x3 is null without having to have a 3rd SELECT statement?
There's probably a very simple solution to do this, but I didn't find
it.
Thanks 7 3987
SELECT
x1,
x2,
X.x3
FROM ... ,
( SELECT ... FROM ... WHERE ...
UNION
SELECT ... FROM ... WHERE ...) as X.x3
Cheers
Serge
--
Serge Rielau
DB2 Solutions Development
IBM Toronto Lab
Thanks for your answers
P. Ratchev :
Is this a valid query? I mean if the UNION of the two SELECT statements
returns more than a single value then you will get an error (at least on SQL
Server).
Fortunately, it's impossible that the UNION returns more than 1
value ! Thanks for your explanations...
S. Rielau :
SELECT
x1,
x2,
X.x3
FROM ... ,
( SELECT ... FROM ... WHERE ...
UNION
SELECT ... FROM ... WHERE ...) as X.x3
Unfortunately, this can't work in my case, because, in my case, I
would have :
SELECT ...
FROM X,
(SELECT ... FROM Y WHERE Y.a=X.a
UNION
............)
The 2nd "FROM" depends on the 1st.
Sorry, I shoud be more precise.
Hiho
>>SELECT
>> x1, x2,
X.x3 FROM ... ,
>> ( SELECT ... FROM ... WHERE ... UNION SELECT ... FROM ... WHERE ...) as X.x3
WHERE Y.a = X.a
I fail to see the problem...
Cheers
Serge
--
Serge Rielau
DB2 Solutions Development
IBM Toronto Lab
Perhaps you mean something like this (SQL Server 2005 required):
CREATE TABLE Foo (x CHAR(1));
CREATE TABLE Bar (x CHAR(1), y CHAR(1));
INSERT INTO Foo VALUES ('a');
INSERT INTO Foo VALUES ('b');
INSERT INTO Bar VALUES ('a', NULL);
INSERT INTO Bar VALUES ('b', '1');
SELECT x, y
FROM Foo AS F
CROSS APPLY (SELECT y FROM Bar AS B1 WHERE B1.x = F.x
UNION
SELECT y FROM Bar AS B2 WHERE B2.x = F.x) AS B
WHERE y IS NOT NULL;
HTH,
Plamen Ratchev http://www.SQLStudio.com
SELECT x, y
FROM Foo AS F
* CROSS APPLY (SELECT y FROM Bar AS B1 WHERE B1.x = F.x
* * * * * * * * * * * UNION
* * * * * * * * * * * SELECT y FROM Bar AS B2 WHERE B2.x = F.x) AS B
WHERE y IS NOT NULL;
Yeah, that's it !
But I'm under SQL Server 2000.... I think I'll keep the first
solution.
S. Rielau : the problem is the "WHERE B1.x=F.x".
If I write SELECT X FROM F, (SELECT ... FROM B1 WHERE B1.x=F.x) AS F1
SQL Server doesn't recognize F.x.
Hiho wrote:
>SELECT x, y FROM Foo AS F CROSS APPLY (SELECT y FROM Bar AS B1 WHERE B1.x = F.x UNION SELECT y FROM Bar AS B2 WHERE B2.x = F.x) AS B WHERE y IS NOT NULL;
Yeah, that's it !
But I'm under SQL Server 2000.... I think I'll keep the first
solution.
S. Rielau : the problem is the "WHERE B1.x=F.x".
If I write SELECT X FROM F, (SELECT ... FROM B1 WHERE B1.x=F.x) AS F1
SQL Server doesn't recognize F.x.
That's not what I wrote.
You can put the WHERE on the outer SELECT.
Teh SQL Standard to make what you tried work is:
FROM X, LATERAL(SELECT ..... WHERE X.blah = ...)
It's called lateral correlation.
Incidently CROSS APPLY Seems to be a funny invention to do SQL Standard:
CROSS JOIN LATERAL(...).
Vendor lock in SQL dialect for no good reason... grmbl grmbl...
Where is Celko when he's needed. ;-)
Cheers
Serge
--
Serge Rielau
DB2 Solutions Development
IBM Toronto Lab
Just for the sake of replicating what you were trying to do, in SQL Server
2000 you can use UDF:
CREATE FUNCTION dbo.B
( @x CHAR(1) )
RETURNS CHAR
AS
BEGIN
SET @x = (SELECT y FROM Bar WHERE x = @x
UNION
SELECT y FROM Bar WHERE x = @x)
RETURN @x
END
Then you can write the query like:
SELECT x, dbo.B(x)
FROM Foo
WHERE dbo.B(x) IS NOT NULL
HTH,
Plamen Ratchev http://www.SQLStudio.com This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Joshua Ruppert |
last post by:
A section of the documentation for the isSet() function states:
Also note that a NULL byte ("\0") is not equivalent to the PHP NULL
constant.
Where would you encounter a NULL byte? Is a null...
|
by: madsgormlarsen |
last post by:
Hi
I need to test a field(colum) in a SQL database for for NULL values,
and have done so in this way.
$query = "SELECT j FROM Andersen";
$result = mysql_query($query, $link_id);
$query_data...
|
by: Ellen Manning |
last post by:
Using SQL2000. I want to return the # of columns with non-null
values. Here's my query so far:
select
case when Dx1 is not null then 0 else 1 end +
case when Dx2 is not null then 0 else 1 end...
|
by: iStrain |
last post by:
Hiya. I'm _sure_ this is an FAQ, but Googling hasn't produced the
answer in a way I can make sense out of. I know I should get this, but
so far no way...
I'm creating tables and doing queries in...
|
by: William Wisnieski |
last post by:
Hello Everyone,
I have a query by form with several list boxes. The user selects items from
the list boxes and clicks a button that returns results in a datasheet
subform.
One of the list...
|
by: teddysnips |
last post by:
Table DDL below:
The tables I have contain Timesheet information. Each row in the
tblTSCollected table contains an entry for an employee into the
timesheet system, specifically by scanning the...
|
by: =?Utf-8?B?UGV0ZXJX?= |
last post by:
I have a TabControl on a Windows form in which I have various tab pages each
with a DataGridView, the first column of which is a
DataGridViewCheckBoxColumn and subsequent columns being...
|
by: Toby Gallier |
last post by:
Hello!
I have a form that is calculating averages as follows:
" =(NZ()+Nz()+Nz())/3 "
However I need to now adjust for null values , so for example if
value2 is null I would then need to...
|
by: preeti13 |
last post by:
Hi guys i am here with my another probelm please help me.trying insert the value into the data base but getting the null value error .I am getting thsi error
Cannot insert the value NULL into...
|
by: Charles Arthur |
last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
|
by: emmanuelkatto |
last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud.
Please let me know.
Thanks!
Emmanuel
|
by: BarryA |
last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
|
by: Sonnysonu |
last post by:
This is the data of csv file
1 2 3
1 2 3
1 2 3
1 2 3
2 3
2 3
3
the lengths should be different i have to store the data by column-wise with in the specific length.
suppose the i have to...
|
by: Hystou |
last post by:
There are some requirements for setting up RAID:
1. The motherboard and BIOS support RAID configuration.
2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
| |