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.