我怎么能用mysql做内连接

时间:2017-10-10 18:19:01

标签: mysql inner-join

songs_albums.cat = songs_singers.id

CAT = ID

我如何才能加入所有专辑歌手?

$qr=mysql_query("
select songs_albums.*
     , songs_singers.name as singer_name
     , songs_singers.id singer_id
     , songs_singers.page_name singer_page_name
     , songs_singers.img singer_img  
  from songs_albums
     , songs_singers 
 where songs_singers.active=1
   and songs_albums.cat=songs_singers.id 
 limit 8
") ;

2 个答案:

答案 0 :(得分:1)

如果我们假设song_singers.Id与song_albums.cat相同,那么你已经是。您只是使用ANSI 89标准而不是ANSI 92标准。

一些提示:

  1. 限制w / o顺序通常没有多大意义。假设我在表格中有1-10条记录。我限制在8.我可以得到8的任何组合。它可能并不总是相同的8,并且它可能并不总是以相同的顺序。
  2. 使用表别名可以更轻松地阅读/打字。
  3. 避免在选择中使用*而是拼出字段以获得您所需的内容。检索比所需更多的数据会增加网络流量,减慢查询检索工作并增加调用服务器的开销。 *在故障排除/调试或开始理解数据/结构时通常是可以接受的;但在编写代码时通常并不明智。
  4. ANSI-89标准:

    SELECT SA.*
         , ss.name as singer_name
         , ss.id as singer_id
         , ss.page_name as singer_page_name
         , ss.img as singer_img  
    FROM songs_albums SA
       , songs_singers SS
    WHERE ss.active=1 
      and sa.cat=ss.id 
    ORDER BY sa.ID, SS.ID
    LIMIT 8
    

    使用内连接的ANSI-92标准。

    SELECT SA.*
         , ss.name as singer_name
         , ss.id as singer_id
         , ss.page_name as singer_page_name
         , ss.img as singer_img  
    FROM songs_albums SA
    INNER JOIN song_singers SS
      on sa.cat=ss.id
    WHERE ss.active=1 
    ORDER BY sa.ID, SS.ID
    LIMIT 8
    

答案 1 :(得分:0)

你可以将专辑ID分配给特定的歌手。现在让所有专辑的所有歌手离开加入查询都是那样的

$sql = "select sa.*,s.id,s.name as singer_name from song_singers as s left join songs_album as sa ON sa.id=s.album_id where s.active=1";