outer join

search for more blogs here

 

"SQL Oddity - OUTER JOINs with criteria act like INNER JOIN" posted by ~Ray
Posted on 2007-12-15 15:09:00

You have a query with an OUTER connect (aka LEFT connect. alter JOIN. LEFT OUTER JOIN. alter OUTER connect) and you be to put separate criteria on the delay or view that is outer joined. But when you do that the ask acts like an inner join. Consider the following ask: It's designed to show all computers that are a member of collectionID 'SMS00004' but we be to have an indicator of whether a machine has OUTLOOK. EXE on it or not so we be to see all machines in that collection. There's a LEFT JOIN on the dbo. V_GS_SoftwareFile view so we would expect to see OUTLOOK. EXE in that second column if it has the file and a NULL if it does not. believe what the ask is saying: If you put something in the WHERE clause you're telling SQL to only pull records that cater those criteria regardless of your INNER or OUTER joins so the LEFT connect on V_GS_SoftwareFile is overridden and acts like an INNER JOIN. (FYI. LEFT JOIN and LEFT OUTER JOIN can be used interchangably as can RIGHT connect and RIGHT OUTER connect.. the OUTER is implied if you exclude it.. also. INNER JOIN is the same as JOIN.) TEACHING MOMENT: Because there's a wide range of skills that read these articles. I'd desire to make sure we don't leave anyone confused or unsure and explain the INNER/OUTER joins. If you know this already just skip to the solution. INNER connect - joins the rows of two tables/views together returning only rows where the join criteria of the delay on the left = the join criteria of the delay on the alter. Basically it only returns rows where they intersect. LEFT OUTER JOIN - joins the rows of two tables/views together but returns ALL of the rows of the table/believe that is on the left align of the join statement and ONLY the rows of the delay/view on the right align of the join statement that matches the join criteria. Any columns from the table on the right will be NULL if they don't match the join criteria. alter OUTER JOIN - joins the rows of two tables/views together but returns ALL of the rows of the delay/view that is on the RIGHT align of the join statement and ONLY the rows of the table/view on the left align of the join statement that matches the join criteria. Any columns from the table on the left will be NULL if they don't be the join criteria. Now when you run this you'll see what you expected from OUTPUT #1 above. What we're telling SQL now is to do a LEFT OUTER JOIN on dbo. V_GS_SoftwareFile where the resourceID is the same as in V_R_System BUT only for rows where the fileName = 'OUTLOOK. EXE' If you undergo an OUTER connect and you need to consider filter criteria that would normally go in the WHERE clause put it after JOIN ON <blah> = <blah> in the FROM clause. Going send if you want to make this more useful for other files and other collections put this into a web report regenerate 'OUTLOOK. EXE' and 'SMS00004' with @FILENAME and @COLLECTIONID and act parameters for those. And as always highlight the query and hit CTRL+L to get the query execution intend. Mouse-over the operator on the far left and look at the be. In this inspect our query appears to use mostly list seeks or clustered index seeks (fast) and has a full be of 3.58. That's super.

Forex Groups - Tips on Trading

Related article:
http://myitforum.com/cs2/blogs/jnelson/archive/2007/11/16/108359.aspx

comments | Add comment | Report as Spam


"sql joins with examples" posted by ~Ray
Posted on 2007-12-09 13:26:19

2)To retrieve the data from more than one table the datatypes of fields which related to different tables need not be same while using the joins 1):Inner Join:This join returns all the rows from the both the tables where there is a match. The result set consists of only matched rows. 1) EmployeeID EmployeeName Productname 2 Sukumar Pen 3 Ravi draw 3 Ravi Eraser 2)Cross Join:go across join is nothing but retrieving the data from more than one delay with out using the condition. a)select E. EmployeeID,E. EmployeeName,P. Productname from Employees E,Products P Note:(here we are using the go across join defaultly. Means we undergo not mentioned the any instruct here.) b)select E. EmployeeID,E. EmployeeName,P. Productname from Employees E go across join Products P say:this is the syantax of cross join. both queries(a &b)returns the same prove) only the difference is Synatx but the o/p is same. a)Left Outer Join:Here left means first delay it reurns all the rows from the first table change surface though it does not have the matchs in Second delay. But it returns only the matched rows from the second delay. a)Right Outer Join:Here Right means Second table it returns all the rows from the back up table even though it does not have the matchs in First delay. But it returns only the matched rows from the First delay. 6)Equi JOIN:An inner join is called equi-join when all the columns are selected with a * or natural join otherwise

Forex Groups - Tips on Trading

Related article:
http://aspspider.blogspot.com/2007/11/sql-joins-with-examples.html

comments | Add comment | Report as Spam


"Databases, Tables and SQL Server: View definition has changed error" posted by ~Ray
Posted on 2007-11-27 20:06:13

I have the following view definition which is suddenly giving me a "believe definition has changed" error when it had been working. OrdAssemParts.*. ; AssemParts. AssemblyId. ; AssemParts. DXFPartId. ; AssemParts. OthPartId. ; (OrdDetails. OrdQty*AssemParts. Qty llNoFilter OR (AssemParts. AssemblyId = lnAssemblyId OrdAssemParts. OrdDetId = lnOrdDetId) Now the only thing that I've changed in this view lately is the calculation of the Qty field. That's working perfectly. In fact everything for all the tables through DXFParts is working just fine. It's only if I add any of the outer joins that appear after that that I have the error. The error also only occurs if I initially open the believe with no data then set the lnAssemblyId and lnOrdDetId variables and try to REQUERY. I've compared the coordinate of the view when it's empty to when it's populated and the structure is the same. This is when I populated it by setting llNoFilter to. T. not by setting lnAssemblyId or lnOrdDetId. And here's the best move! I don't even have to be pulling any fields from those outer join tables to cause the error!Later... I've open out a bit more although I'm no closer to solving the problem. If I look at the coordinate when the believe is empty the CustPartNo field is 50 characters as expected but if I set the variables the way the program is trying to set them when it has a problem and then be the view the CustPartNo handle is only 30 characters. Huh? How can this be when I undergo a PADR(...50) around that field? And why would removing the measure four outer joins which have nothing to do with the CustPartNo handle fix this problem?

Forex Groups - Tips on Trading

Related article:
http://www.foxite.com/archives/0000151334.htm

comments | Add comment | Report as Spam


"Problem with Outer Join and Microsoft SQL Db's." posted by ~Ray
Posted on 2007-11-17 15:47:43

Welcome to our new external user forums with added features such as RSS feeds a look rating system improved search and navigation capabilities and contributions from Business Objects staff. Our can still be viewed in read only format. Our forums accept our customers to interact with each other for advice on product uses and best-practices. The forums are not intended to be a replacement for phone or interactive web give. To ensure rapid issue resolution please log give cases through the divide of our site or by phone. Our ERP system runs on M$ SQL. I try not to meddle with it because any changes are ruined when we grade to the latest version of the software. So. I created another small database on the same server with the additional information needed for my reports. Here is my problem. I am writing a weekly sales report and using an outside program to alter things. I am e-mailing them to our sales reps. However if a rep doesn't have any sales then nothing comes up in crystal when that rep number is entered as a parameter. Knowing that I wanted a report of some kind to prove. I tried to do a left outer join from the rep number field in table 1 (from my database) to the back up set of tables I get no records. If I get no records then I cannot pull the e-mail communicate from my delay to telecommunicate a blank report. I upgraded to XI Developer because I had read on the web that CR9 had problems with outer joins.

Forex Groups - Tips on Trading

Related article:
http://technicalsupport.businessobjects.com/cs/forums/thread/9094.aspx

comments | Add comment | Report as Spam


"Re: cannot add virtual column to search columns?" posted by ~Ray
Posted on 2007-11-09 17:31:15

On Sep 7. 3:05 pm. Bonefish <bonefish fo...@gmail com> wrote:> The "LOWER()" that's causing your error is because there's no real db> column for your virtual column. The search builds a sql query and you> can't do a db query against a virtual column. I'm not sure how your> "to_denominate" is defined but in some cases you can get around this by> doing something desire:> config columns[:software_config_descriptions] search_sql => 'software_configs name'>> where "software_configs" is the sql tablename for :software_config and> "name" is the column name you be to search on. As far as I know you> can only decide one column so if your "to_label" is combining a clump> of different columns (name + label2 + label3) then you might not be able> to do it>> Unless that is you create a virtual column for each of name label2,> name3 etc. You can then add them to config columns but then exclude> them from enumerate show etc so they don't be anywhere. You can> comfort see and use them in the search e g.>> #only included in columns to use them for field searching> config columns add :name2. :label3> config list columns do away with :name2. :label3> config create columns do away with :name2. :name3> config modify columns exclude :label2. :label3> config show columns do away with :name2. :label3>> config columns[:label2] search_sql = 'software_configs name2'> config columns[:name3] examine_sql = 'software_configs label3'>> On Sep 7. 11:26 am. Robin <rdwhee...@rsglobal net> wrote:>> > In a model (pvr rb) I have a custom accessor:>> > def software_config_descriptions> > desc = Array new()> > software_configs each do |s|> > desc << s to_denominate> > end> > go desc> > end>> > I add it to the controller:>> > config columns add :software_config_descriptions>> > but when I use it to examine:>> > config examine columns << :software_config_descriptions>> > I assail out with:>> > Mysql::Error: #42000Incorrect parameter count in the label to native> > function 'LOWER': decide count(DISTINCT pvrs id) AS count_all FROM> > pvrs LEFT OUTER connect pvr_statuses ON pvr_statuses id => > pvrs pvr_status_id LEFT OUTER JOIN customers ON customers id => > pvrs customer_id LEFT OUTER JOIN pvrs_users ON pvrs_users pvr_id => > pvrs id LEFT OUTER connect users ON users id = pvrs_users user_id WHERE> > ((LOWER(pvrs.`label`) LIKE '%2.3%' OR LOWER(pvrs.`pvr_be`) LIKE> > '%2.3%' OR displace(pvrs.`se_name`) desire '%2.3%' OR LOWER() desire> > '%2.3%'))>> > This alter sense to anyone? Is there a prob with using virtual columns> > for searching or should I be looking somewhere else for an error? --~--~---------~--~----~------------~-------~--~----~You received this message because you are subscribed to the Google Groups "ActiveScaffold : Ruby on Rails plugin" assort. To affix to this assort send telecommunicate to activescaffold@googlegroups comTo unsubscribe from this group displace email to activescaffold-unsubmark@googlegroups comFor more options visit this group at -~----------~----~----~----~------~----~------~--~---

Forex Groups - Tips on Trading

Related article:
http://ruby--blog.blogspot.com/2007/09/re-cannot-add-virtual-column-to-search.html

comments | Add comment | Report as Spam


"DELETE - SQL" posted by ~Ray
Posted on 2007-11-03 14:03:39

remove... [ FROM... ] [ ... connect... ] [ WHERE... ] // FULL Syntax follows:DELETE [ FROM ] { [ database. ] [ owner. ] delay_label [ WITH ( INDEX ( Index_1. [ index_2. ... n ] ) | FASTFIRSTROW | HOLDLOCK | PAGLOCK | READCOMMITTED | REPEATABLEREAD | ROWLOCK | SERIALIZABLE | TABLOCK | TABLOCKX [ .. n | ... n ] ) ] | OPENQUERY( server. 'query' ) | OPENROWSET( 'provider_name'. { 'datasource';'user_id';'password'. | 'provider_arrange'. } { [ catalog. ] [ schema. ] object | 'query' } ) | view_label } [ FROM { derived_delay [ [ AS ] table_alias ] [ ( column_alias_1. [ column_alias_2. ... n ] ) ] | CONTAINSTABLE ( table column | *. 'examine_conditions' ) [ [ AS ] delay_alias ] | FREETEXTTABLE ( table column | *. 'remove_text_arrange' ) [ [ AS ] table_alias ] | delay_name [ [ AS ] delay_alias ] [ WITH ( INDEX ( Index_1. [ index_2. ... n ] ) | FASTFIRSTROW | HOLDLOCK | NOLOCK | PAGLOCK | READCOMMITTED | READPAST | READUNCOMMITTED | REPEATABLEREAD | ROWLOCK | SERIALIZABLE | TABLOCK | TABLOCKX | UPDLOCK [ .. n | ... n ] ) ] | believe_name [ [ AS ] delay_alias ] } [ INNER connect | LEFT [ OUTER ] connect | alter [ OUTER ] connect { derived_table [ ON search_conditions ] | OPENQUERY( server. 'query' ) [ ON search_conditions ] | OPENROWSET ( 'provider_label'. { 'datasource';'user_id';'password'. | 'provider_arrange'. } { [ catalog. ] [ schema. ] disapprove | 'ask' } ) [ ON search_conditions ] | table_name [ ON search_conditions ] | view_label [ ON search_conditions ] } [ ... n ] | CROSS connect | FULL [ OUTER ] connect { derived_table | OPENQUERY( server. 'query' ) | OPENROWSET ( 'provider_name'. { 'datasource';'user_id';'password'. | 'provider_string'. } { [ catalog. ] [ schema. ] disapprove | 'query' } ) | table_name | view_name } [ ... n ] ] ] [ { WHERE examine_conditions | WHERE CURRENT OF [ GLOBAL ] cursor_name | WHERE CURRENT OF cursor_variable_label } [ OPTION ( abstain be_rows | compel request | HASH GROUP | request GROUP | HASH JOIN | LOOP connect | MERGE JOIN | act PLAN | MAXDOP | ROBUST PLAN | CONCAT UNION | HASH UNION | MERGE UNION [ ... n ] ) ] ] //Full explanation follows:KEYWORDSKeywords are denoted with upper case letters. adapt the spelling variablesAll user-supplied variables are denoted with displace case letters.... nSignifies that there can be more than one value in a comma delimited list. Note that the dots and n are not part of the code and must not appear in the SQL ask... nSignifies that there can be more than one determine in a keep lay delimited list. Note that the dots and n are not part of the code and must not appear in the SQL ask.{ } Signifies that all or some portion of the label elements between the braces are required elements and must appear in the SQL query. say that these braces are not move of the label and must not be in the SQL query.[ ] Signifies that the code elements between the form brackets can optionally appear in the SQL query but are not required. Note that these brackets are not part of the code and must not appear in the SQL ask.|The or symbol signifies that you may use only one of the label elements or values from the possible choices. Note that the or symbol is not move of the code and must not appear in the SQL ask.

Forex Groups - Tips on Trading

Related article:
http://snippets.dzone.com/posts/show/4498

comments | Add comment | Report as Spam


"theme_pager and pager_query problems" posted by ~Ray
Posted on 2007-10-28 12:07:09

//Create the sql statement to find the info we want.$sql = "select offer furnish_id as offer_id,account label as be_name,form name as form_name,furnish name as furnish_name,offer beat_label as offer_fullname,furnish url as offer_url,offer is_active as offer_is_active,furnish is_exclusive as furnish_is_exclusive,offer description as offer_descriptionfrom offer left outer join account on (account be_id = offer account_id)left outer join create on (create form_id = furnish create_id)"; //Create the array of table headers. $header = array( array('data' => 'offer_id'. 'field' => 'offer_id'. 'colspan' => $colspan) array('data' => 'account_name'. 'handle' => 'account_name'. 'colspan' => $colspan) array('data' => 'create_name'. 'handle' => 'create_name'. 'colspan' => $colspan) array('data' => 'furnish_label'. 'handle' => 'offer_label'. 'colspan' => $colspan) array('data' => 'offer_fullname'. 'handle' => 'offer_fullname'. 'colspan' => $colspan) arrange('data' => 'offer_url'. 'handle' => 'offer_url'. 'colspan' => $colspan) array('data' => 'offer_is_active'. 'field' => 'offer_is_active'. 'colspan' => $colspan) arrange('data' => 'offer_is_exclusive'. 'field' => 'offer_is_exclusive'. 'colspan' => $colspan) arrange('data' => 'offer_description'. 'field' => 'furnish_description'. 'colspan' => $colspan). ); //Loop through the prove set while ($data = db_fetch_object($result)) {$rows[] = array($data->furnish_id,$data->be_name,$data->form_label,$data->offer_label,$data->offer_fullname,$data->furnish_url,$data->offer_is_active,$data->furnish_is_exclusive,$data->offer_description); } //Make sure we found some results.. if (!$rows) { $rows[] = array(arrange('data' => t('alter at the moment..'). 'colspan' => '6')); } it ordain show all the results but the pager isnt there. (because of the fact that there is only 11 records.) My challenge is how can i limit to 5 records per page and undergo it summon through ALL the records correctly...

Forex Groups - Tips on Trading

Related article:
http://drupal.org/node/174818

comments | Add comment | Report as Spam


"RE: Help with Outer Join SQL Stmt" posted by ~Ray
Posted on 2007-10-23 15:58:54

About peopletools-lPeopleTools-L is your premier peer-to-peer resource for objective technical discussion on PeopleTools. Reduce your communicate's research and development time. enter today to join this remove telecommunicate based discussion assort. I figured it out. LEFT OUTER JOIN can live peacefully with effdts but it gets steadily trickier. Problem was that the prior outer join was creating legit joins (tuples?) with the future dated row(s). Then the max(effdt) where clause was excluding them from the query therefore no null was returned. Wow. decide B. EMPLID. B. EMPL_RCD,t emplid,t effdt FROM PS_EMPLOYMENT B LEFT OUTER connect PS_TL_EMPL_DATA T ON B. EMPLID = T. EMPLID AND T. EMPL_RCD = B. EMPL_RCD AND T. EFFDT <= '01/jan/1980' << put your limiting go out herewhere 1=1 and b emplid='xxxxxx' <<<<your own emplid and (T. EFFDT = (decide MAX(T1. EFFDT) FROM PS_TL_EMPL_DATA T1 WHERE T1. EMPLID = T. EMPLID AND T1. EMPL_RCD = T. EMPL_RCD) <<don't need to limit go out here or T. EFFDT IS NULL)Wonder if this can be made to work with the old Oracle (+) syntax?Bruce The information entered on this page is required only to despatch your message to the appropriate people. It will not be used to send unsolicited email and ordain not be sold to a 3rd party. Please to construe our detailed privacy policy. I figured it out. LEFT OUTER JOIN can live peacefully with effdts but it gets steadily trickier. Problem was that the prior outer join was creating legit joins (tuples?) with the future dated row(s). Then the max(effdt) where clause was excluding them from the query therefore no null was returned. Wow. SELECT B. EMPLID. B. EMPL_RCD,t emplid,t effdt FROM PS_EMPLOYMENT B LEFT OUTER JOIN PS_TL_EMPL_DATA T ON B. EMPLID = T. EMPLID AND T. EMPL_RCD = B. EMPL_RCD AND T. EFFDT <= '01/jan/1980' << put your limiting go out herewhere 1=1 and b emplid='xxxxxx' <<<<your own emplid and (T. EFFDT = (SELECT MAX(T1. EFFDT) FROM PS_TL_EMPL_DATA T1 WHERE T1. EMPLID = T. EMPLID AND T1. EMPL_RCD = T. EMPL_RCD) <<don't need to limit go out here or T. EFFDT IS NULL)Wonder if this can be made to work with the old Oracle (+) syntax?Bruce Copyright © 1998-2007 Information Technology Toolbox. Inc. All product names are trademarks of their respective companies. Information Technology Toolbox. Inc is not affiliated with or endorsed by any company listed at this site.

Forex Groups - Tips on Trading

Related article:
http://peoplesoft.ittoolbox.com/groups/technical-functional/peopletools-l/1573194&rss=1

comments | Add comment | Report as Spam


"mysql full outer join" posted by ~Ray
Posted on 2007-10-17 14:33:42

why doesn't the following work?mysql> decide * from girls full outer join boys where girls city = boys city;where :drop table girls;drop table boys;create table girls (name varchar(12) city varchar(12));create delay boys (name varchar(12) city varchar(12));attach into girls values('Mary'. 'Boston');insert into girls values('Nancy' null);insert into girls values('Susan'. 'Chicago');insert into girls values('Betty'. 'Chicago');attach into girls values('Anne'. 'Denver');insert into boys values('John'. 'Boston');attach into boys values('Henry'. 'Boston');insert into boys values('George' null);insert into boys values('Sam'. 'Chicago');attach into boys values('James'. 'Dallas');BTW left and right work OK! (regenerate beat with left or right)-- Message posted via DBMonster com. .. There is no suble discrimination against boys by women and girls.. but only with TOTALLY compete FUNDING. ... > No one has ever been able to demonstratethat the fact that more boys> act in sports means the girls get shortchanged in the classroom.... (soc men) . was not really a pedophile but was simply acting out of his curiosity. .. the house my aunt and uncle had rented out to a "nice... Plus boys develop slowerthan girls of that age. ... (soc men) .. There is no suble discrimination against boys by women and girls... The "proof"that was used for girls is apparently not good enough to be... >>> Your observationsare not relevant to equal funding. .. single person plan two-person or familyplan depending on their... (soc men) .. There is no suble discrimination against boys by women and girls...>>> compete FUNDING is my only concern regardless of how they spend it. ... >>act in sports means the girls get shortchanged in the classroom. ... (soc men)

Forex Groups - Tips on Trading

Related article:
http://newsgroups.derkeiler.com/Archive/Comp/comp.databases/2007-08/msg00137.html

comments | Add comment | Report as Spam


"outer join question" posted by ~Ray
Posted on 2007-10-02 21:06:42

Hi. I'm studying a book which is full of errors and the errata seems sketchy. Is this statement change by reversal?"In outer join statements on tables A and B you contract the left outer join when you want all of table B's rows even when no corresponding preserve exists in table A"I had this down as change by reversal but the answer in the book has it as do by. I'm pulling my hair out here!Is it right or do by please?.

Forex Groups - Tips on Trading

Related article:
http://newsgroups.derkeiler.com/Archive/Comp/comp.databases.oracle.server/2007-08/msg00921.html

comments | Add comment | Report as Spam


 

 




blogs - aa blogs - air force blogs - aquarius blogs - aries blogs - army blogs - arts blogs - baby blogs - blogs 4 men - blogs 4 women - cancer blogs - capricorn blogs - career change blogs - choice blogs - christmas blogs - cigar blogs - cigarette blogs - cig blogs - coast guard blogs - coffee bean blogs - college baseball blogs - college basketball blogs - college football blogs - colleges blogs - computer blogs - create blogs - dating blogs - elvis blogs - email chat blogs - email pal blogs - enhancement blogs - fall blogs - fha blogs - freedom blogs - friendly blogs - funny blogs - gambler blogs - gemini blogs - her blog - his blog - hockey blogs - join blogs - javas blogs - kid safe blogs - leo blogs - libra blogs - apartments blogs - coffees blogs - horoscopes blogs - life advice blogs - lover blogs - marine blogs - married blogs - military blogs - misc blogs - more money blogs - mortgage blogs - move blogs - movies blogs - musical blogs - navy blogs - new in town blogs - obscure blogs - online date blogs - online game blogs - over 30 blogs - over 40 blogs - over 50 blogs - over 60 blogs - over 70 blogs - over 80 blogs - over 90 blogs - password blogs - pc blogs - mortgages blogs - peoples blogs - pictures blogs - pipe blogs - pisces blogs - poems blogs - poker blogs - police blogs - political blogs radio blogs - read blogs - recreational vehicle blogs - relocation blogs - reserve blogs - rv blogs - safe blogs - scorpio blogs - singles blogs - smokers blogs - smoker blogs - state blogs - state college blogs - taurus blogs - teen advice blogs - teenager blogs - tobacco blogs - tv blogs - vacation blogs - veteran blogs - virgo blogs - virtual blogs - weekly blogs - wingman blogs - word blogs - words blogs - writer blogs - poetry blogs - prescription blogs - sagittarius blogs - straight blogs - summer blogs - gi blogs - hooka blogs - penis enlargement blogs - vfw blogs - casinos blogs - casino blogs - web hosting blogs - hosting blogs - auto blogs - truck blogs - van blogs - suv blogs - 4 wheel blogs - harley blogs - flu blogs - diet blogs - pistols blogs - teenage blogs - lpga blogs - burnable blogs - new tunes blogs - coaching blogs - treasures blogs - trades blogs - nutty blogs - skate blogs - play 21 blogs - weather blogs - poker players - golf blogs - american blogs - football blogs - baseball blogs - hockey blogs - basketball blogs - soccer blogs - cooking blogs - recipe blogs - space blogs - 3d games blogs - barbecue blogs




the outer join archives:

11 articles in 2006-01
22 articles in 2006-02
27 articles in 2006-03
37 articles in 2006-04
27 articles in 2006-05
26 articles in 2006-06
24 articles in 2006-07
18 articles in 2006-08
22 articles in 2006-09
30 articles in 2006-10
22 articles in 2006-11
22 articles in 2006-12
12 articles in 2007-01
12 articles in 2007-02
3 articles in 2007-03
7 articles in 2007-04
11 articles in 2007-05
10 articles in 2007-06
3 articles in 2007-07
1 articles in 2007-09




next page


outer join