On Tue, Feb 12, 2002 at 01:31:43PM -0000, DL Neil wrote:
| Hello Nuno,
| 
| >   I'm trying to make a query with only one command but I can't see how to do
| >   it.
| >
| >   Supose that are 2 tables like:
| >
| >   table QA table QB
| >   ref text ref text
| >   --- ---- --- ----
| >   a1 texta1 b1 textb1
| >   a2 texta2 b2 textb2
| >   a3 texta3 b3 textb3
| >
| >   and there is a table that indicates the relation between QB and QA data:
| >
| >   table relAB
| >   A   B
| >   --  --
| >   a1  b2
| >   a1  b3
| >   a1  b4
| >   a2  b1
| >   a2  b2
| >
| >   This example says that b2,b3,b4 are related to a1 and b1,b2 are
| >   related to a2.
| >
| >   What I want to do is get a list from table QB related to an item from
| >   table QA:
| >
| >   For example, get a list from QB related to item 'a1':
| >
| >   1. select B from relAB where A='a1';
| >
| >   (result: b2, b3, b4)
| >
| >   2. select * from QB where ref in ('b2','b3','b4');
| >
| >   (result: only 'a1' related items)
| >
| >   There is a way of make this query with only one command?
| >
| >   Something like:
| >
| >   1. select * from QB where ref in (select B from relAB where A='a1');
| 
| 
| The technique you describe is called a "join", ie joining two tables together, and 
|yes, you can have more than
| one join in a single SQL query.
| 
| So starting with (1) let's join tables RelAB and QA by informing MySQL that we want 
|to match the row in table QA
| with the corresponding row(s) in RelAB
| 
| select A, B from relAB, QA where QA.ref='a1' AND QA.ref=A;
| 
| (notice that I added "A" to the SELECT clause, which we know from the WHERE clause 
|will be 'a1', but I assume
| that once you have the query working that query-value change from time-to-time. Also 
|I moved the relationship
| between the constant ('a1') and the source-table. If the tblNm.colNm notation is 
|unfamiliar, please check the
| manual - it is necessary because the term "ref" is ambiguous/could refer to either 
|tbl QA or tbl QB)
| 
| Similarly with (2) we can extend your code to join tables RelAB and WB
| 
| select * from QB where QB.ref in ('b2','b3','b4') AND B=QB.ref;
| 
| NB let's treat this as pseudo-code that only looks like SQL!
| 
| Of course you found the 'b2','b3','b4' series by executing query (1), so let's now 
|put the two queries
| together - just as you knew they should be:
| 
| select A, QB.* from QB, relAB, QA
| where QA.ref='a1'
|   AND QA.ref=A
|   AND B=QB.ref;
| 
| Now that you know the terminology, you will be able to find helpful tutorials on the 
|various supporting web
| sites - start with MySQL's site.
| 
| BTW: I followed your sequence of queries to construct the joined-query. Perhaps it's 
|just me, but I normally
| start at the 'end' and work 'back' to the 'beginning' - so I'd start with what I 
|wanted out of QB, work back to
| 'how to get it from relAB' and thence right back to QA. I find it easier to 
|'visualise', but then other people
| aren't (quite) this crazy!
| 
| Regards,
| =dn

  Hi,
  
  Ok. I start understand this better and what I need is working very well now.
  
  I think I've posted this doubt because I made some confusion about "linking" 
  or relating diferent tables like in this example.
  
  Now I know that with JOIN I can create relations between diferent tables and 
  then maintain a good database structure by having things separated from each 
  other.
  
  Thanks again for you help,
  
  
  
-- 
Nuno Teixeira
pt-quorum.com

/* 
PGP Public Key:
http://www.pt-quorum.com/pgp/nunoteixeira.asc
Key fingerprint:
8C2C B364 D4DC 0C92 56F5  CE6F 8F07 720A 63A0 4FC7
*/

---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to