diff --git a/core/modules/views/views.api.php b/core/modules/views/views.api.php
index 35e99be..291cb28 100644
--- a/core/modules/views/views.api.php
+++ b/core/modules/views/views.api.php
@@ -98,8 +98,10 @@ function hook_views_analyze(Drupal\views\ViewExecutable $view) {
  * To provide views data for an entity, instead of implementing this hook,
  * create a class implementing \Drupal\views\EntityViewsDataInterface and
  * reference this in the "views" annotation in the entity class. The return
- * value of the getViewsData() method on the interface is the same as this hook.
- * See the @link entity_api Entity API topic @endlink for more information about
+ * value of the getViewsData() method on the interface is the same as this hook,
+ * and base class in \Drupal\views\EntityViewsData will take care of adding the
+ * basic Views tables and fields for your entity. See the
+ * @link entity_api Entity API topic @endlink for more information about
  * entities.
  *
  * The data described with this hook is fetched and retrieved by
@@ -124,6 +126,7 @@ function hook_views_data() {
   //   numeric_field INT(11)        COMMENT 'Just a numeric field.',
   //   boolean_field INT(1)         COMMENT 'Just an on/off field.',
   //   timestamp_field INT(8)       COMMENT 'Just a timestamp field.',
+  //   langcode VARCHAR(12)         COMMENT 'Language code field.',
   //   PRIMARY KEY(nid)
   // );
 
@@ -185,6 +188,28 @@ function hook_views_data() {
     ),
   );
 
+  // You can also do a more complex join. For instance, since this table
+  // has a language code field, you might want to join to node-based views
+  // via the node_field_data table, rather than the base node table, and you
+  // might want to join on both the nid field and the langcode field. To do
+  // this:
+  $data['example_table']['table']['join']['node'] = array(
+    // 'node' above is the base we're joining to in Views. 'left_table'
+    // is the table we're actually joining to, in order to get to 'node'. It
+    // has to be something that Views knows how to join to 'node'.
+    'left_table' => 'node_field_data',
+    'left_field' => 'nid',
+    'field' => 'nid',
+    // 'extra' is an array of extra WHERE conditions for the join.
+    'extra' => array(
+      // This syntax matches additional fields in the two tables.
+      array('left_field' => 'langcode', 'field' => 'langcode'),
+      // This syntax adds a condition on our table. 'operator' defaults to
+      // '=' for non-array values, or 'IN' for array values.
+      array('field' => 'numeric_field', 'value' => 0, 'numeric' => TRUE, 'operator' => '>'),
+    ),
+  );
+
   // Other array elements at the top level of your table's array describe
   // individual database table fields made available to Views. The array keys
   // are the names (unique within the table) used by Views for the fields,
