Click to See Complete Forum and Search --> : mysql syntax
resullivan
01-15-2006, 07:26 AM
I learned SQL through oracle and am wondering if maybe the syntax is just a little different. Anyway, I am trying to run a query to find all the rows that contain a certain blank field. I know that they exist and they are not null. The column is a varchar. I try a simle query,
select row from table where row = '';
It does not return an error but it does not return anything. Also, my join statemet will not work.
select table.row from table, table2 where table.row = table2.row;
(apparently subqueries are not available until mysql 4.1). Once again no error just no results. I thought maybe it was an issue with whitespace but it is to my understanding that in mysql if the column is a varchar that it chops off trailing whitespice. This is really frustrating me. Any help would be much appreciated.
bathurst_guy
01-15-2006, 08:09 AM
Yes whitespaces are removed from the end of inputs in a varchar field.
Have you tried to search for where row IS NULL and see if that returns the results you expected
chazzy
01-15-2006, 12:24 PM
note that in MySQL these 2 queries have different results:
INSERT INTO your_table(single_field) VALUES('');
INSERT INTO your_table(single_field) VALUES(NULL);
basically in MySQL the only thing that's null is "NULL".
As for the second issue, I couldn't explain that without understanding more of your table structure (for some reason I doubt that row, table, and table2 are the real names) and what values they're comparing.
resullivan
01-20-2006, 07:11 AM
I figured out the first one. There was a carriage return.
select * from table where row = '\r';
Still have not figured out the join though.
this is what I am trying. There are two tables. One is web_desc and the other is machines2. web_desc has two rows, web_desc and groupname where machiens2 has several rows web_desc being one of them. There are several web_desc for every groupname and there are several machines for every web_desc. I am trying to get all the distinct web_desc for a certain groupname.
select distinct web_desc.web_desc from web_desc, machines2 where web_desc.web_desc = machines2.web_desc and web_desc.groupname = 'somegroup';
It seems kind of funny to me. I am not sure why. I guess maybe because I have not done much with joins but I think most of the ones I have done I am not outputting the same column that I am joining.
This is how I would do a subquery
select web_desc from web_desc where groupname = 'somegroup' and web_desc in (select distinct web_desc from machines2);
It is not critical to get this working because I have used php to get the results I want. It would make the code a bit simpler though.
Here is it all in action:
http://www.equipmentremarketing.com/catalog.php
chazzy
01-20-2006, 08:15 AM
for some reason, i don't think you need to join the tables, at least for this part, based on how you described it.
I'm sure you already know this, but,
select web_desc from web_desc where groupname = 'somegroup'
will give you all of the web_desc for a specific groupname. you should be able to do this also
select m.* from machines2 m, web_desc w WHERE w.groupname='somegroup' and m.web_desc = w.web_desc
should give you all of the machines2 data for the particular groupnames.
resullivan
01-21-2006, 05:44 AM
I found out what it was. It was the carraige return again.
select distinct web_desc.web_desc from web_desc, machines2 where
groupname = 'automatics' and web_desc.web_desc = machines2.web_desc & '\r'
Thanks for your help.