Mysql
 sql >> база данни >  >> RDS >> Mysql

Връзка към обекти и проблем с LEFT OUTER JOIN с отношения МНОГО:1

Работих малко върху доставчик на рамка на обект и го разгледах. Смятам, че самият доставчик няма избор в ситуацията. Командното дърво се създава от рамката на обекта и го предоставя на доставчика за изграждане на SQL. Това тук е пълно предположение, но може би причината да генерира LEFT OUTER съединението в тази ситуация е, че рамката на обекта наистина не знае, че референтното ограничение съществува в базата данни. Например, мога да вляза и да се занимавам с модела на обекта, след като е създаден от базата данни, и да добавя/променя ограничения, които нямат отражение върху това, което прави базата данни. Може би поради тази причина дизайнерите са избрали да играят на сигурно и да създадат ЛЯВОТО ВЪНШНО съединение „за всеки случай“.

Въпреки това вярвам, че можете да получите вътрешно присъединяване. Например следното накара доставчика да изгради LEFT OUTER съединение:

var res2 = from a in ent.answers
           select new
           { a.Answer1, a.user.UserName };

Въпреки това, следното води до INNER съединение:

res2 = from a in ent.answers
       join u in ent.users
       on a.UserID equals u.PK
       select new { a.Answer1, u.UserName };

Също така, следният обект SQL създаде вътрешно съединение:

ObjectQuery<DbDataRecord> dr = ent.CreateQuery<DbDataRecord>( 
         "SELECT a.answer1, u.username " +
         "FROM answers as a inner join users as u on a.userid = u.pk" );



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. c# mysql sum заявка за етикетиране

  2. Laravel Carbon Group по месеци

  3. C# Твърде много връзки в MySQL

  4. Функция SCHEMA() в MySQL

  5. как да разберете броя на дните в месеца в mysql